3

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

4

3 に答える 3

2

これは、再起動をスケジュールすることが最も簡単な解決策の 1 つです。

于 2009-10-15T20:43:30.573 に答える
1

@saschaに同意します。この場合、再起動は最も簡単であるだけでなく、最もクリーンです。他の提案されたソリューションはすべて、将来的にはるかに高い失敗率に備えることになります。私見、GACに関するWindowsインストーラーの設計は壊れています。再起動はその認識です。

于 2009-10-19T15:38:59.430 に答える