【发布时间】:2012-02-15 07:32:01
【问题描述】:
我有一个 Windows 应用程序(可以说它是“App A”),其中包含一些 Windows 服务和一个窗口窗体。
现在我正在创建另一个包含 Windows 服务的应用程序(将其命名为“App B”)。这将在我的服务器上检查是否有更新版本的“App A”可用。如果有更新的版本可用,它将
下载新版本 --> 卸载“App A” --> 安装新版本
对于卸载,我正在使用此代码:
private void uninstall()
{
Process p = new Process();
p.StartInfo.FileName = "C:\\WINDOWS\\system32\\msiexec.exe";
p.StartInfo.Arguments = "/x \"c:\\AppA.msi\" /qn";
p.Start();
p.WaitForExit();
}
为了安装,我使用这个代码:
private void install()
{
Process p = new Process();
p.StartInfo.FileName = "C:\\WINDOWS\\system32\\msiexec.exe";
p.StartInfo.Arguments = "/i \"c:\\AppA.msi\" /qn";
p.Start();
p.WaitForExit();
}
但此代码不起作用,应用程序未卸载。
如果我做错了什么,请告诉我。真的很紧急。
【问题讨论】:
-
我想一种解决方案可能是使用动态绑定/反射,如果我没记错的话,您可以使用它动态绑定您的程序集......
-
除了“不工作”之外,您是否获得了更多信息:任何错误消息、日志等?
-
为什么您的数据包名称是 c:\\AppA.msi\ 而不是 c:\\AppA.msi ? (目录或文件)
-
我的问题与 Lonli 相同,当我使用 GUID 进行 MSI 卸载时,/x 和文件|uid 之间通常没有空格:MSIEXEC.exe /q /norestart /x "C:\myapp.msi"
-
@Lonli-Lokli 我认为这只是一个转义的 " 字符。
标签: c# winforms windows-services auto-update