对于我正在处理的应用程序,我有一个.msi安装程序(通过wix),但应用程序的版本号不符合我的MSI注册表所需的XYZ版本号Version
所以版本数字被“篡改”成适合的东西,并且每次发布都会增加。
我对此很好。
msiexec
,作为最终清理的一部分,将此X.Y.Z整数编码版本号转换为字符串并将其转储到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
Version
是编码值“5.00.7958”,那么DisplayVersion
字符串的其余部分来自哪里?
如果仅使用wix / msi支持的选项,我是否可以使用自己的自定义字符串覆盖注册表中的DisplayVersion
?
答案 0 :(得分:1)
可能是一个比你想要做的更大的改变,但是......
如果在MSI中设置ARPSYSTEMCOMPONENT = 1,它将不会为您的产品注册ARP条目。然后,您可以通过在MSI的注册表中填充HKLM \ Software \ Microsoft \ Windows \ CurrentVersion \ Uninstall \ [ProductCode]键来为您的产品创建自己的ARP条目。
答案 1 :(得分:0)
我最终通过让MSI在安装过程快结束时启动自定义安装程序二进制文件来完成此任务。该程序会派生自身的背景副本并退出,以便安装完成。
后台任务休眠一段时间以使安装完成,然后直接更改注册表以将DisplayVersion
设置为所需的字符串。
这里有一个竞争条件,但这不是问题,更新字符串也不是必需的。