【发布时间】: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