torutkのブログ

ソフトウェア・エンジニアのブログ

Visual C++長年の課題が

あまりWindowsプログラミングはしないので(Javaは使うがWindows固有なことはしない)、たまにVisual C++でプログラムを作成するときの課題で長年残っていたもののうち以下2つが今日解決しました。

  1. Windows上でインストーラでインストールできるようにする
  2. Win32API(特にWinSock API)のエラーコードから文字列に変換して通知する

知っている人は知っているという話しなんですが・・・

Windows上でインストーラを作る

Visual Studio の製品版では、インストーラを作るセットアップ/デプロイメント・プロジェクトがあって、Visual Studio上で作成したプログラムが簡単にmsi形式のインストーラになるということを今頃知りました。

5分もあれば一通り分かる位とっても簡単ですが、デバッグ・ビルドとリリースビルドそれぞれごとにインストーラ(.msi)ができてしまう、インストールするファイルを細かく指定するのが大変(量が多い場合で取捨選択するとき)などの欠点もあります。

他にツールがないかと調べてみると、Windows Installer 4.5 SDKというのがMicrosoftからリリースされていました。

使い方の解説があるページはちょこっと検索した範囲では見当たらず・・・

WiXなるWindows Installer XML toolsetなるものがあるようです。Windows Installer SDK上で、XMLベースで定義を書いてインストーラを作成するという流れのようです。

エラーコードから文字列に変換する

UNIX系でのperrorがないねぇ、と思っていました。GetLastError、WSAGetLastErrorでエラーコードを拾えますが、エラー通知(ログかエラーダイアログ)ではコード(数値)で出して、あとで調べるという手間をかけていました。
FormatMessageというAPIで、エラーコードを文字列に変換できることを今日しりました。
でも、FormatMessageは引数が多くて制御が面倒です。

unix系で文字列化はstrerrorです

perrorだと標準エラー出力に出すので文字列化はstrerrorですね。