我有一个.msi安装程序(通过qazxswpoi)我正在处理的应用程序,但应用程序的版本号不符合我的MSI的注册表wix所需的XYZ版本号,所以版本号被“修复”成适合的东西每次发布都会增加。
我没关系。
Version
作为最终清理的一部分,将此X.Y.Z整数编码版本号转换为字符串并将其转储到msiexec
注册表项中。我想要做的是用我自己的字符串覆盖该字符串,其中包含我的应用程序的实际版本号。
这当然可能。例如...
DisplayVersion
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\19BF4688EE4961F41A44D0282A2340D9\InstallProperties
DisplayName = (REG_SZ) "Configuration Manager Client"
LocalPackage = (REG_SZ) "C:\Windows\Installer\41202.msi"
DisplayVersion = (REG_SZ) "5.00.7958.1000"
Version = (REG_DWORD) 0x05001f16
是编码值“5.00.7958”,那么Version
字符串的其余部分来自哪里?
如何,仅使用wix / msi支持的选项,我是否使用自己的自定义字符串覆盖注册表中的DisplayVersion
?
可能是一个比你想要做的更大的变化,但......
如果在MSI中设置ARPSYSTEMCOMPONENT = 1,它将不会为您的产品注册ARP条目。然后,您可以通过在MSI的注册表中填充HKLM \ Software \ Microsoft \ Windows \ CurrentVersion \ Uninstall \ [ProductCode]键来为您的产品创建自己的ARP条目。
我最终通过让MSI在安装过程结束时启动自定义安装程序二进制文件来完成此操作。该程序会分配自身的后台副本并退出,以便安装完成。
后台任务会暂停一段时间以完成安装,然后直接更改注册表以将DisplayVersion
设置为所需的字符串。
这里有一个竞争条件,但它不是一个问题,更新字符串并不重要。