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

时间:2015-08-11 20:21:14

标签: c# visual-studio-2010 windows-installer msiexec

我正在尝试在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();
      }
   }
}

1 个答案:

答案 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