在VS2010中卸载和安装c#应用程序不能按预期顺序执行
本文关键字:不能按 顺序 执行 应用程序 VS2010 卸载 安装 | 更新日期: 2023-09-27 18:07:19
我正在尝试更新VS2010在IIS7.5上发布的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();
}
}
}
如果你的安装时间比完成主程序的时间长,你将看不到它。
尝试为您的安装添加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