使用自定义字符串

时间:2015-08-06 15:56:43

标签: wix windows-installer msiexec

对于我正在处理的应用程序,我有一个.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

2 个答案:

答案 0 :(得分:1)

可能是一个比你想要做的更大的改变,但是......

如果在MSI中设置ARPSYSTEMCOMPONENT = 1,它将不会为您的产品注册ARP条目。然后,您可以通过在MSI的注册表中填充HKLM \ Software \ Microsoft \ Windows \ CurrentVersion \ Uninstall \ [ProductCode]键来为您的产品创建自己的ARP条目。

答案 1 :(得分:0)

我最终通过让MSI在安装过程快结束时启动自定义安装程序二进制文件来完成此任务。该程序会派生自身的背景副本并退出,以便安装完成。

后台任务休眠一段时间以使安装完成,然后直接更改注册表以将DisplayVersion设置为所需的字符串。

这里有一个竞争条件,但这不是问题,更新字符串也不是必需的。