【问题标题】:Should I be changing the ProductCode in my .vdproj file on each build?我是否应该在每次构建时更改 .vdproj 文件中的 ProductCode?
【发布时间】:2010-10-13 04:50:21
【问题描述】:

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

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

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

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

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

或者,我们有什么方法可以使用从未更改的值 UpgradeCode 进行卸载?

反馈:

我对此进行了更多研究,并改变了我们在部署系统中进行卸载的方式,该系统部署到我们相当大的测试资产中。我现在从 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 和设置文件,所以发送一个小脚本并不是真正的问题。

这可能对其他人有所帮助——谁知道呢。

【问题讨论】:

    标签: visual-studio-2008 windows-installer


    【解决方案1】:

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

    【讨论】:

    • 我首先进行完全卸载的原因是因为 VS2008 中的行为发生了变化,即在新 msi 的安装操作之前不会调用原始 msi 的卸载操作。然后我们的服务创建自定义操作失败了,但现在已经挖掘了更多。
    猜你喜欢
    • 1970-01-01
    • 2022-12-14
    • 2021-09-20
    • 2016-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-08
    相关资源
    最近更新 更多