アプリケーションのアンインストーラーは通常、新しいプロセスを起動し、アプリケーションにそれを認識させようとしています。そのため、アンインストール後にいくつかのタスクが実行されます。
たとえばNSIS。
string uninstallstring = "C:\\Program Files (x86)\\Pidgin\uninstall.exe"; // reg.GetValue("UninstallString").ToString();
Process p = new Process()
{
StartInfo = new ProcessStartInfo()
{
FileName = uninstallstring
},
EnableRaisingEvents = true
};
p.Start();
p.WaitForExit();
Debug.WriteLine(p.HasExited);
Debug.WriteLine(p.ExitCode);
// clean up TASKS after uninstall here
// clean clean clean
上記のコードは Pidgin をアンインストールしようとします。Start() が実行され、アンインストーラーがジョブを終了し、デバッグ パネルに True/False (HasExited) とその ExitCode が表示されるまで待機する必要があります。
問題は、Start() が実行された後、"uninstall.exe" が "C:\Users\Jayson\AppData\Local\Temp\~nsu.tmp" で新しいアプリケーション "Au_.exe" を起動し、"uninstall .exe" が閉じられ、WaitForExit() がジョブを完了し、デバッグ パネルが表示されます
True
0
それらは「HasExited」と「ExitCode」ですが、Pidgin Uninstallはまだ実行中であり、「uninstall.exe」が「Au_.exe」を子プロセスではなく起動したことがわかります。
私の質問は、アンインストーラーがその仕事を確実に終了するにはどうすればよいですか?