我正在尝试在IIS7.5上更新由VS2010发布的C#应用程序。
我需要卸载它然后安装一个新的。 如果我在调试模式下运行代码,它运行良好。 但是,如果我在没有调试模式的发布中运行它。我得错误了
Another version of the product is already installed. Installation of this version cannot continue. To configure or remove the existing version of this product, use Add/remove programs on the control panel.
我发现原因是"安装"在"卸载"仍然没有完成。如何确保"卸载"在"安装"之前完成开始了?我使用了 WaitForExit ()(https://msdn.microsoft.com/en-us/library/ty0d8k56.aspx)但是,卸载后,"安装"未执行。
代码在这里:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace msiexec_uninstall_install
{
class Program
{
static void Main(string[] args)
{
var p = System.Diagnostics.Process.Start("msiexec", "/uninstall http://MyServer/MyApp.msi");
p.WaitForExit();
Console.WriteLine("after uninstall");
System.Diagnostics.Process.Start("msiexec", "/i http://myServer/MyApp_new.msi");
Console.WriteLine("after install");
Console.ReadLine();
}
}
}
答案 0 :(得分:1)
如果您的安装时间比完成主程序所需的时间长,那么您将无法看到它
尝试为您的安装添加WaitForExit();
。
static void Main(string[] args)
{
var uninstallProcess = System.Diagnostics.Process.Start("msiexec", "/uninstall http://MyServer/MyApp.msi");
uninstallProcess.WaitForExit();
Console.WriteLine("after uninstall");
var installProcess = System.Diagnostics.Process.Start("msiexec", "/i http://myServer/MyApp_new.msi");
installProcess.WaitForExit();
Console.WriteLine("after install");
Console.ReadLine();
}
这样,您的Main方法只会在安装完成后结束。为了安全起见,您甚至可以为WaitForExit()
添加一些超时:
installProcess.WaitForExit(10000); //10 sec