WiX を使用して MSI インストーラーを作成し、MSI によってインストールされた DLL に依存するサービスを開始しています。Vista では、MSI のフェーズで DLL がグローバル アセンブリ キャッシュに追加されるInstallFinalize
ため、WiX で組み込みのサービス開始コマンドを使用できません。その 1 つは、DLL が GAC にある前にサービスを開始しようとして失敗します。解決策は、[1] の代わりにカスタム アクションを使用し、それを実行することのようInstallFinalize
です。
私が使用したカスタムアクションは、でサービスを開始していましたsc
。管理者としてインストーラーを実行するとすべてが正常に機能しますが、通常のユーザーとして実行すると機能しません。インストーラーは、実際のインストール フェーズの特権を昇格させますが、インストールの完了後にそれらを削除しsc
、非特権ユーザーとしてサービスを開始すると失敗します。InstallFinalize
[2]以降、管理者権限を取得するためにカスタム アクションを延期し、偽装しないように設定しても機能しません。
最後<Condition>Privileged</Condition>
に、WiX ファイルに追加して、インストーラーを管理者として実行する必要があることをユーザーに伝えようとしましたが、それも機能しませんでした。値はインストール中に 1 に設定されます。Privileged
メインのインストール シーケンスに高い権限が与えられた場合などです。
それで、Vista、非管理者ユーザー、インストーラーがサービスを開始する必要があり、サービスがインストール中にGACに入って実行する必要があるという組み合わせに遭遇した人はいますか?これに対する実用的な一般的なアプローチはありますか?
[1] http://www.mail-archive.com/wix-users@lists.sourceforge.net/msg09162.html
[2] http://www.mail-archive.com/wix-users@lists.sourceforge.net/msg15381.html