我有一个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();
}
但此代码无法正常运行,并且未卸载应用程序。
如果我做错了,请告诉我。它非常紧急。
答案 0 :(得分:1)
为了帮助解决为什么会发生这种情况,我会做两件事,首先将卸载代码更改为:
private void uninstall()
{
Process p = new Process();
p.StartInfo.FileName = @"C:\WINDOWS\system32\msiexec.exe";
p.StartInfo.Arguments = @"C:\Windows\System32\MSIEXEC.EXE /l* ""AppAUninstall.log"" /q /norestart /x""C:\MyApp.msi""";
p.Start();
p.WaitForExit();
}
此代码将保留一个名为AppAUninstall.log的文件,该文件将告诉您msi卸载的输出,这可能有关于它为什么不卸载的信息
另外,你有一个安静的参数/ q。大多数情况下,在运行时需要在Windows Vista及更高版本上使用UAC升级MSI,因此如果您的更新程序应用程序未以管理员身份运行,那么这将悄然失败。
马丁