我可以通过命令行和定制的Inno Setup安装程序成功卸载第三方应用程序。卸载命令仅在发布模式下失败
命令行执行:
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 服务正在以 本地系统帐户的身份运行/登录。
- 我已经查阅了我的应用程序日志 并且我已验证 执行的命令参数是 在调试和发布模式下都是相同的。
- 我已经咨询了事件查看器 ,但它没有提供任何线索。
想法?任何帮助将不胜感激。谢谢。
该应用程序的安装程序被封装在自定义InnoSetup安装程序中。 InnoSetup安装程序反过来由登录用户手动执行。也就是说,卸载由在本地系统帐户下运行的服务触发。我会尝试让服务安装并卸载。许多thx。 – 2008-09-12 15:17:59