我应该在每个构建中更改我的.vdproj文件中的ProductCode吗?

时间:2009-03-13 15:45:40

标签: visual-studio-2008 windows-installer

目前,我们的构建会自动更新部署项目文件(VS2008)中的版本号,并更改ProductCode和PackageCode。

我们根本不使用太多的MSI功能,它更像是一种打包方法,也是一种运行自定义操作的方法,这些操作根据作为MSI内容提供的定义文件执行某些活动。

因此,就MSI功能而言,我们所有的构建看起来都是一样的,它们只是拉入其他项目输出的较新版本而不是部署项目中的任何更改,因此我们不会改变结构完全没有MSI。

那么,我可以安全地让ProductCode保持稳定吗?

我想这样做的原因是我通过产品代码卸载,直到我发现这是一种愚蠢的方式,因为我们的构建一直在改变它们!

或者,有没有什么方法可以使用从未更改过的值来升级?

反馈:

我在这个上挖了一点,改变了我们在部署系统中进行卸载的方式,该系统部署到我们相当大的测试区域。我现在从MSI中提取UpgradeCode,而不是从MSI中提取ProductCode并在MSI / X命令中使用它。作为卸载的一部分,我提供并远程执行(通过PSEXEC)一个小的vbs脚本,通过

查找相关产品
set oWI = CreateObject("WindowsInstaller.Installer")
set related - oWI.RelatedProducts(wscript.arguments(0))  
if related.Count == 1 then
    uninstallString = "msiexec /X " & related.Item(0) & " /qn"
    set oShell = CreateObject("WScript.Shell")
    oShell.Run uninstallString, 1, True
end if
好吧,可能不是世界上最好的vbs - 但它的工作原理是将UpgradeCode作为第一个参数传递给脚本。还有一些用于记录等的行,所以我们可以告诉审计跟踪发生了什么。

直接通过psexec直接调用msiexec,但是我已经提供了msi和一个设置文件,所以发送一个小脚本并不是真正的问题。

这可能有助于其他人 - 谁知道。

1 个答案:

答案 0 :(得分:1)

如果在Visual Studio中打开.vdproj,在“解决方案资源管理器”窗格中选择项目,然后在“属性”窗格中查找名为“RemovePreviousVersions”的属性。如果此属性设置为true,则在安装新版本时,将自动卸载具有相同UpgradeCode但具有早期版本的任何已安装产品。