3

WiX でインストーラーを作成しました。インストールが完了すると、Explorer プロセスにコードを挿入するアプリケーションが開始されます。

現在、アンインストールすると、再起動マネージャーが起動し、アプリケーションとエクスプローラーをシャットダウンするよう提案されます。その代わりに、アプリケーションを手動で閉じたいです (これは、コマンド ラインで -exit を使用して再度実行することによって行われます)。それを行うカスタムアクションがあります。

これが私がこれまでに試したことです:

<CustomAction ExeCommand="-exit" FileKey="MyApp.exe" Id="CloseMyApp" Impersonate="yes" Return="ignore" />

<InstallExecuteSequence>
    <RemoveExistingProducts After="InstallInitialize" />
    <Custom Action="CloseMyApp" Before="RemoveFiles" />
</InstallExecuteSequence>

これはうまくいきません。アクションは、Restart Manager セッションの後に行われます。そのため、再起動マネージャーがポップアップし、アプリとエクスプローラーを閉じるように求められます。アクションは後で実行されますが、それまでにアプリは既になくなっています。

それで、私はこれを試しました:

<InstallExecuteSequence>
    <RemoveExistingProducts After="InstallInitialize" />
    <Custom Action="CloseMyApp" Before="RemoveExistingProducts" />
</InstallExecuteSequence>

これも機能しません。アクションはまだ遅すぎます。また、「警告 LGHT1076 : ICE63: 一部のアクションが InstallInitialize と RemoveExistingProducts の間にあります。」というメッセージも表示されます。

基本的に、アンインストール中および再起動マネージャー セッションの前にカスタム アクションを実行するにはどうすればよいですか?

Impersonate="no" を使用すると、適切なタイミングで実行される可能性があると思いますが、それはオプションではありません。これは、ウィンドウを検索してメッセージを送信するために閉じる必要があるプロセスと同じユーザーに対して、新しいプロセスを実行する必要があるためです。プロセスが異なるユーザーに属している場合、これを行うのは非常に困難です。

何か案は?

4

1 に答える 1

5

InstallValidate の前に CloseMyApp カスタム アクションを実行する必要があります。これは、再起動マネージャーが処理されるとき ( doc ) であるためです。または、MSIDISABLERMRESTART または MSIRESTARTMANAGERCONTROL プロパティを使用して再起動マネージャーを無効にすることもできます。

于 2010-07-11T01:19:04.087 に答える