在我们的产品中,我们在Wix中使用Product Id="*"
告诉它为每个新构建生成新的产品代码。我们现在在安装时要求将安装的MSI的产品代码记录到我们的一个注册表项中。我们可以通过循环查看“卸载”注册表项中的条目来查找产品名称和版本,从而在运行时推断产品代码,但在安装时直接记录此信息会更清晰。
有没有办法让Wix告诉我它生成了什么ProductCode
,以便我可以将它作为变量添加到RegistryValue
Wix元素?
我猜测没有,所以我尝试使用<?define?>
将变量设置为所有问号"????????-????-????-????-????????????"
,并在Product
元素中使用此变量以及RegistryValue
元素。这适用于Product
元素,它会继续生成新的GUID,但在RegistryValue
元素中,此变量在编译时不会展开,这意味着注册表项只会添加所有问号。
有没有纯粹的Wix方式来实现我想要的?我可以在Wix之外生成ProductCode
并让Wix元素将其用作环境变量,但这会给构建过程增加额外的复杂性 - 这可能会破坏其他内容。如果我能用Wix完全做到这一点,我想要它。
答案 0 :(得分:8)
产品代码始终作为属性提供,无论您将哪些内容放入@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>