无法按预期顺序执行在 VS2010 中卸载和安装 C# 应用程序

uninstall and install C# application in VS2010 cannot be executed in expected order

我正在尝试更新 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. 

我发现原因是 "install" 在 "uninstall" 还未完成时开始。如何确保 "uninstall" 在 "install" 开始之前完成?我使用了 WaitForExit() (https://msdn.microsoft.com/en-us/library/ty0d8k56.aspx) 但是,卸载后,"install" 没有执行

代码在这里:

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