在 Wix 中获取生成的 ProductCode 作为变量
Posted
技术标签:
【中文标题】在 Wix 中获取生成的 ProductCode 作为变量【英文标题】:Obtaining generated ProductCode as a variable in Wix 【发布时间】:2013-09-18 23:30:04 【问题描述】:在我们的产品中,我们使用 Wix 中的Product Id="*"
告诉它为每个新版本生成一个新产品代码。我们现在需要在安装期间将正在安装的 MSI 的产品代码记录到我们的注册表项之一中。我们可以在运行时通过循环“卸载”注册表项中的条目来查找我们的产品名称和版本来推断产品代码,但在安装时直接记录这些信息会更简洁。
Wix 有没有办法告诉我它生成了什么 ProductCode
,以便我可以将它作为变量添加到 RegistryValue
Wix 元素?
我猜没有,所以我尝试使用<?define?>
为所有问号"????????-????-????-????-????????????"
设置一个变量,并在Product
元素和RegistryValue
元素中使用了这个变量。这适用于 Product
元素 好的,它会继续生成新的 GUID,但在 RegistryValue
元素中,此变量不会在编译时扩展,这意味着注册表项只是添加了所有问号。
是否有任何纯 Wix 方法来实现我想要的?我可以在 Wix 之外生成 ProductCode
并让 Wix 元素将其用作环境变量,但这会给构建过程增加额外的复杂性——其他可能会破坏的东西。如果我能纯粹用 Wix 来做这件事,我会很高兴。
【问题讨论】:
【参考方案1】:无论您在@ProductCode
中输入什么,产品代码始终作为属性提供。因此,以下内容应该适用于您的情况:
<RegistryKey Root="HKLM" Key="My Product">
<RegistryValue Name="TheProductCode" Type="string" Value="[ProductCode]" KeyPath="yes" />
</RegistryKey>
此外,它不仅可以放在注册表值中,还可以放在注册表键名中:
<RegistryKey Root="HKLM" Key="$(var.RegistryRoot)\[ProductCode]">
...
</RegistryKey>
【讨论】:
以上是关于在 Wix 中获取生成的 ProductCode 作为变量的主要内容,如果未能解决你的问题,请参考以下文章
用Wix手工编辑XML制作C++ MSI安装程序,怎样保证安装新版本时候强制卸载旧版本,急急急!!!