C# 在使用VS 2005安装项目安装新组件之前卸载以前的组件

C# 在使用VS 2005安装项目安装新组件之前卸载以前的组件,c#,visual-studio-2005,setup-project,uninstallation,custom-action,C#,Visual Studio 2005,Setup Project,Uninstallation,Custom Action,我有一个自定义操作,应该在.msi安装程序的安装部分执行。我有一个以前的版本是使用InstallShield安装的(这太过分了),我想使用更简单的VS Setup Proj,因为我不需要.isproj提供的所有控制。然而,直接安装我的新.msi似乎与以前的版本并排安装。以下是我目前发现的情况: 我有我的产品ID 我已经编写了一些代码,通过创建使用MsiExec.exe的进程来卸载以前的版本(代码如下) 已尝试在安装过程中实现要卸载的自定义操作,但一次似乎只能运行一个MsiExec.exe实例 你

我有一个自定义操作,应该在.msi安装程序的安装部分执行。我有一个以前的版本是使用InstallShield安装的(这太过分了),我想使用更简单的VS Setup Proj,因为我不需要.isproj提供的所有控制。然而,直接安装我的新.msi似乎与以前的版本并排安装。以下是我目前发现的情况:

  • 我有我的产品ID
  • 我已经编写了一些代码,通过创建使用MsiExec.exe的进程来卸载以前的版本(代码如下)
  • 已尝试在安装过程中实现要卸载的自定义操作,但一次似乎只能运行一个MsiExec.exe实例
  • 你去过这个职位吗(http://stackoverflow.com/questions/197365/vs-setup-project-uninstall-other-component-on-install),这没用
  • 自定义操作代码:

            //Exe used to uninstall
            string fileName = "MsiExec.exe";
    
            //Product ID of versions installed using InstallShield
            string productID = "{DC625BCF-5E7B-4FEF-96DD-3CDBA7FC02C1}";
    
            //Use /x for uninstall and use /qn to supress interface
            ProcessStartInfo startInfo = new ProcessStartInfo(fileName, string.Format("/x{0}", productID));
            startInfo.WindowStyle = ProcessWindowStyle.Normal;
            startInfo.UseShellExecute = false;
    
            //Start process
            Process uninstallProcess = Process.Start(startInfo);
    
            //Wait until uninstall is complete
            uninstallProcess.WaitForExit();
    
    我希望最终通过ClickOnce部署我的.msi,所以我希望有一个适合部署选项的选项。目前,所有内容都是用.NET2.0和VS2005编写的,但如果有新的选项可以使用,我确实可以使用.NET4.0和VS2010


    非常感谢您的帮助。

    通过使我的安装程序的产品代码与旧版本的代码相同,我能够在上一次安装的基础上进行安装。我没有意识到我会尝试这样做,因为当您创建安装程序包的新版本时,VS总是提示您更改产品代码