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

时间:2010-11-17 21:01:01

标签: c# visual-studio-2005 setup-project uninstall custom-action

我有一个自定义操作,应该在.msi安装的安装部分执行。我有一个使用InstallShield安装的先前版本(这是一种矫枉过正),并希望转移到更简单的VS Setup Proj,因为我不需要.isproj提供的所有控件。但是,使用我的新.msi进行直接安装似乎与先前版本并排安装。这是我到目前为止所发现的:

  1. 我有我的产品ID
  2. 我编写的代码将通过创建使用MsiExec.exe的进程来卸载以前的版本(代码将随之而来)
  3. 尝试在安装过程中实现要卸载的自定义操作,但似乎一次只能运行一个MsiExec.exe实例。
  4. 去过这篇文章(http://stackoverflow.com/questions/197365/vs-setup-project-uninstall-other-component-on-install),这没什么帮助。
  5. 自定义操作代码:

            //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,所以我希望有一个适合部署选项的选项。目前一切都是用.NET 2.0和VS 2005编写的,但如果有新选项可用,我确实可以使用.NET 4.0和VS 2010.

    感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

通过使我的设置的产品代码与旧版本的代码相同,我能够安装在之前安装的顶部。我没有尝试过,因为当您创建新版本的安装程序包时,VS总是会提示您更改产品代码。