【发布时间】:2008-09-10 23:16:32
【问题描述】:
我能够通过命令行和自定义 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 服务 卸载命令正在运行 与代码相同的机器 在调试模式下测试。窗户 服务正在运行/登录为 本地系统帐户。
- 我查阅了我的应用程序日志 我已经验证了 执行的命令参数是 调试和发布模式都一样。
- 我已经咨询了事件查看器 但它没有提供任何线索。
想法?任何帮助将不胜感激。谢谢。
【问题讨论】:
标签: c# installation service