次のことを達成しようとして困難な問題に遭遇しました: 私のアプリケーションは、サービス (watchdog.exe) と exe ファイル (app.exe) をインストールします。
インストールが完了すると、サービスが開始され、プロセス「app.exe」が作成されます。
アンインストール中にプロセス「app.exe」を強制終了したい(これはローカルシステムアカウントで実行されているため、管理者として実行する必要があります)。
問題 1: インストールでは、CostFinalize フェーズ中にファイル "app.exe" が保持 (実行) されていることがわかるため、再起動が必要であると表示されます (再起動が行われるかどうかを確認するフェーズについて間違っている場合は修正してください)。必要)。アンインストールの開始時にプロセスを強制終了することをお勧めします。アンインストール中にプロセスが実行されていない場合、インストールで再起動が必要であるというメッセージが表示されないことを確認しました。
問題 2: カスタム アクションを使用してプロセスを強制終了することには問題があります。アクションは昇格して実行する必要がありますが、一方で costFinalize の前に実行する必要があります (そうしないと、問題 1 に戻ります)。
提案をいただければ幸いです。また、代替ソリューション (おそらくインストール中に再起動を必要としないプロセスを閉じる別の方法はありますか?)
私が今持っているカスタムアクションコード(不必要に再起動を要求し、権限がないためにプロセスを強制終了できないため、良くありません):
<InstallExecuteSequence>
<!--<ScheduleReboot After="InstallFinalize" />-->
<Custom Action="MyProcess.TaskKill" Before="InstallValidate"></Custom>
</InstallExecuteSequence>
<!--<Property Id="Net">Net.exe</Property>-->
<Property Id="QtExecCmdLine" Value='"[%SYSTEMROOT]\System32\taskkill.exe" /F /IM App.exe' />
<CustomAction Id="MyProcess.TaskKill"
BinaryKey="WixCA"
DllEntry="CAQuietExec"
Execute="immediate"
Return="ignore" />
失敗のログは次のとおりです。
CAQuietExec: エラー 0x80070001: コマンド ラインがエラーを返しました。CAQuietExec: エラー 0x80070001: CAQuietExec Failed CustomAction MyProcess.TaskKill が実際のエラー コード 1603 を返しました (変換がサンドボックス内で発生した場合、これは 100% 正確ではない可能性があることに注意してください) アクションは 18:15:54 で終了しました: MyProcess.TaskKill. 戻り値 1603。