Decremented Blog

プログラミング、釣り、工作など、ジャンルを特に定めず、適当に書かれたブログです。

[WiX] VisualStudioのセットアップ・プロジェクトからWiXへ移行する上で発生した問題

2011-07-31 22:17:46 | プログラミング・開発
04WebServerのインストーラを、VisualStudioのセットアップ・プロジェクトから、WiXに移行しているのですが、2件ほど困った問題が起こりました。

■一個の実行ファイルを、サービス/アプリケーションどちらとしても利用する
04WebServerは、システム・サービスとしてもアプリケーションとしてもインストール可能です。
インストール時にユーザが選択するようになっているのですが、WiXで実現しようとすると上手く行きませんでした。

サービスとして登録するコンポーネントと、アプリとして登録するコンポーネントを作り、ユーザの選択によって、インストールするコンポーネントを変えるようにしましたが、2個のコンポーネントから同じファイルを参照してるため、エラーとなってしまいます。
WindowsInstallerの概念的には、ファイルを配置するコンポーネントを別に作って、サービス/アプリどちらのインストールモードでもインストールされるよう作るのが正しいのですが、WiXの<ServiceInstall>が、ファイルの参照に対応していないので、この方法では無理でした。

結局、サービス/アプリで、実行ファイルのファイル名を変えて登録するようにしました。
ちょっと気持ち悪いですが、まあ、仕方ないですね~


■インストールタイプ(Per-Machine/Per-User)が異なる場合の、インストール済みプロダクトの検出
WindowsInstallerでは、UpgradeCodeを利用してインストール済みの過去のバージョンを検索しますが、インストールタイプ(特定ユーザを対象にインストールするか、コンピュータの全ユーザ対象にインストールするか)が異なると、この検索に引っかからなくなります。

WiXのMLを見たりしましたが、現在のところ、素直な解決方法は無いようです。
結局、DLLを作って、カスタムアクションで過去のバージョンを検索するようにして解決しました。
ソースは、sf.jpのsvnに上がってますので、そちらを参照ください。

下記を参考にしました。
Advanced Installer • View topic - Uninstall previous version, regardless of installation type?:

最新の画像もっと見る