我能够通过命令行和自定义 Inno Setup 安装程序成功卸载第三方应用程序。
命令行执行:
MSIEXEC.exe /x {14D74337-01C2-4F8F-B44B-67FC613E5B1F} /qn
Inno 设置命令:
[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();
但是,当作为已编译、部署的 Windows 服务运行时,相同的 C# 代码会产生以下失败输出:
"This action is only valid for products that are currently installed."
补充评论:
- 发出卸载命令的 Windows 服务与在调试模式下测试的代码在同一台机器上运行。Windows 服务正在以本地系统帐户运行/登录。
- 我查阅了我的应用程序日志,并验证了在调试和发布模式下执行的命令参数是相同的。
- 我已经咨询了事件查看器,但它没有提供任何线索。
想法?任何帮助将不胜感激。谢谢。