以编程方式获取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
或一些不同的工具)由我们的网络管理员。
MSI安装失败,因为"已安装此产品的另一个版本"
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只在它不存在的情况下作为安装的一部分放置在系统文件夹中,并且在卸载时不会删除它-因此忽略该警告并直接使用它是相当安全的。