以编程方式获取Visual Studio Setup Project's ProductCode用于应用程序

本文关键字:ProductCode 应用程序 用于 Project 方式 编程 获取 Visual Setup Studio | 更新日期: 2023-09-27 17:49:01

我使用Visual Studio的Setup and Deployment创建了一个安装程序,它通常做得很好。

不时地,我的某个版本有缺陷,我需要一种方法来快速扭转我的决定,去进行我的神话般的升级。

我可以通过包含继承自System.Configuration.Installer的自定义类来创建链接,或者在我的应用程序中创建一个选项来卸载自己,以便我可以使用以下内容重新安装旧版本:

//using System.Diagnostics;
public static void Uninstall(string productCode, string option) {
  if (!String.IsNullOrEmpty(productCode) && !String.IsNullOrEmpty(option)) {
    string path = Environment.GetFolderPath(Environment.SpecialFolder.System);
    string param1 = string.Format("{0} {1}", path, @"'msiexec.exe");
    string param2 = string.Format("{0} {1}", option, productCode);
    ProcessStartInfo psInfo = new ProcessStartInfo(param1, param2);
    // NOTE: `option` = /i to repair or remove; /x to remove only
    try {
      Process.Start(psInfo);
      return;
    } catch (Exception) { } // the uninstall failed
  }
}

所以…

我的问题:我如何获得我的安装的ProductCode ?

注意:我理解微软建议通过Add/Remove Programs (XP)或Programs and Features (Vista/7),但我的应用程序是在一个制造环境中,大多数pc机已经删除了这些功能(使用tweak或一些不同的工具)由我们的网络管理员。

以编程方式获取Visual Studio Setup Project's ProductCode用于应用程序

MSI安装失败,因为"已安装此产品的另一个版本"

有一个VBS片段,你可能会发现作为一个模型有用。

Ben在SO文章中的回答在Visual Studio安装项目中,我如何生成卸载脚本?给了我想要的

总结:

"使用Visual Studio 2005/2008,您不需要编写任何代码来为安装项目添加卸载选项(是的,我知道有些人可以编写代码来完成)

  • Setup Project ->文件系统窗口->右键单击"目标机器上的文件系统"->添加一个特殊文件夹,选择系统文件夹;

  • 在这个系统文件夹中添加一个文件。从本地System32文件夹中浏览msiexex .exe并添加它。重写该文件的默认属性如下:

条件:=未安装(确保你把'未安装'完全一样,相同的情况和一切),永久:=True,系统:=True,传递:=True,重要:=False。

  • 在"用户程序菜单"下创建一个新的快捷方式,将目标设置为在步骤1中创建的系统文件夹。指向msiexec。exe。将快捷方式重命名为"Uninstall Your Application"。设置参数属性为/x{space}[ProductCode]。

  • 构建项目,忽略应该排除msiexec的警告,不要排除它,否则安装项目将无法构建。

' Not Installed '条件和Permananet:=True确保msiexec.exe只在它不存在的情况下作为安装的一部分放置在系统文件夹中,并且在卸载时不会删除它-因此忽略该警告并直接使用它是相当安全的。