Visual studio 2008 我是否应该在每次生成时更改.vdproj文件中的ProductCode?

Visual studio 2008 我是否应该在每次生成时更改.vdproj文件中的ProductCode?,visual-studio-2008,windows-installer,Visual Studio 2008,Windows Installer,目前,我们的构建自动更新部署项目文件(VS2008)中的版本号,并更改ProductCode和PackageCode 我们根本不使用太多的MSI功能,它更多的是一种打包方法和一种运行自定义操作的方式,这些操作根据MSI中作为内容提供的定义文件执行某些活动 因此,就MSI功能而言,我们所有的构建看起来都是一样的,它们只会引入其他项目输出的更新版本,而不是部署项目中的任何更改,因此我们根本不会更改MSI的结构 那么,让ProductCode保持稳定安全吗 我之所以想这样做是因为我是通过产品代码卸载的

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

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

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

那么,让ProductCode保持稳定安全吗

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

或者,是否有任何方法可以使用永不更改的值UpgradeCode卸载

反馈:

我在这方面做了更多的研究,并改变了我们在部署系统中进行卸载的方式,该系统部署到我们的大型测试资产中。我现在从MSI中提取升级代码,而不是从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和一个设置文件,所以发送一个小脚本并不是一个真正的问题


这可能会帮助其他人——谁知道呢

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

我之所以首先执行完全卸载,是因为VS2008中的行为发生了更改,即在新msi的安装操作之前未调用原始msi的卸载操作。然后,我们的服务创建自定义操作失败了,但现在我们已经在这方面做了更多的研究。