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?:
■一個の実行ファイルを、サービス/アプリケーションどちらとしても利用する
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?: