コマンドラインとカスタムのInnoSetupインストーラーを使用して、サードパーティのアプリケーションを正常にアンインストールできます。
コマンドライン実行:
MSIEXEC.exe /x {14D74337-01C2-4F8F-B44B-67FC613E5B1F} /qn
Inno Setupコマンド:
[Run]
Filename: msiexec.exe; Flags: runhidden waituntilterminated;
Parameters: "/x {{14D74337-01C2-4F8F-B44B-67FC613E5B1F} /qn";
StatusMsg: "Uninstalling Service...";
次のC#コードをデバッグモードで実行すると、プログラムでアプリケーションをアンインストールすることもできます。
C#コード:
string fileName = "MSIEXEC.exe";
string arguments = "/x {14D74337-01C2-4F8F-B44B-67FC613E5B1F} /qn";
ProcessStartInfo psi = new ProcessStartInfo(fileName, arguments)
{
CreateNoWindow = true,
UseShellExecute = false,
RedirectStandardOutput = true
};
Process process = Process.Start(psi);
string errorMsg = process.StandardOutput.ReadToEnd();
process.WaitForExit();
ただし、同じC#コードをコンパイルして展開したWindowsサービスとして実行すると、次のエラー出力が生成されます。
"This action is only valid for products that are currently installed."
追加コメント:
- アンインストールコマンドを発行しているWindowsサービスは、デバッグモードでテストされているコードと同じマシンで実行されています。Windowsサービスは、ローカルシステムアカウントとして実行/ログオンしています。
- アプリケーションログを調べて、実行されたコマンド引数がデバッグモードとリリースモードの両方で同じであることを確認しました。
- イベントビューアに相談しましたが、手がかりがありません。
考え?どんな助けでも大歓迎です。ありがとう。