以编程方式获取Visual Studio安装项目的应用产品代码
我有一个使用Visual Studio的安装和部署创建的安装程序,它通常非常好。以编程方式获取Visual Studio安装项目的应用产品代码
有时候,我的一个版本是有缺陷的,我需要一种方法来快速撤销我的决定,以我的神话般的升级去。
我可以包括从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
或一些不同的工具)由我们的网络管理员。
通过Ben在SO文章In a Visual Studio setup project, How do I generate an uninstall script?得到了我所需要的。
总结如下:
“使用Visual Studio 2005/2008,你不需要编写任何代码添加卸载选项安装项目(是的,我知道有些人可以编写代码做它)
在安装项目 - >文件系统窗口 - >右键点击“文件系统目标机器上” - >添加一个特殊的文件夹,选择系统文件夹;
进入这个系统文件夹添加文件。从本地System32文件夹中浏览msiexec.exe并添加它。覆盖此文件的默认属性如下:
条件:=未安装(确保你把“未安装”完全一样,同样的情况下,一切),永久:= True时,系统:=真,传递:=真,重要:=假。
的“用户程序菜单”,设定目标,你在第1步,并指出这是在msiexec.exe的创建的系统文件夹下创建一个新的快捷方式。将快捷方式重命名为“卸载您的应用程序”。将Arguments属性设置为/ x {空格} [ProductCode]。
构建项目,忽略msiexec应该排除的事实的警告,不要排除它或安装项目不会生成。
在“未安装”条件和Permananet:=真确保MSIEXEC.EXE仅放置到系统文件夹为一体的部分安装,如果它不存在AREADY,并且它不被除去上一个卸载 - 因此它是非常安全的忽略这个警告,只是去为它。
MSI Install Fails because "Another version of this product is already installed"有一个VBS片段,您可能会发现它可以用作模型。
尝试使用MsiEnumProducts列出系统上的所有产品。或者,如果您知道升级代码(不会从构建到构建),您可以识别系统上共享该升级代码的所有其他产品,希望不多。http://www.pinvoke.net/default.aspx /msi/MsiEnumRelatedProducts.html – 2011-04-12 20:09:34