在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();
      }
   }
}

在VS2010中卸载和安装c#应用程序不能按预期顺序执行

如果你的安装时间比完成主程序的时间长,你将看不到它。
尝试为您的安装添加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