在Wix中获取生成的ProductCode作为变量

时间:2013-09-18 23:30:04

标签: wix wix3 wix3.7

在我们的产品中,我们在Wix中使用Product Id="*"告诉它为每个新构建生成新的产品代码。我们现在在安装时要求将安装的MSI的产品代码记录到我们的一个注册表项中。我们可以通过循环查看“卸载”注册表项中的条目来查找产品名称和版本,从而在运行时推断产品代码,但在安装时直接记录此信息会更清晰。

有没有办法让Wix告诉我它生成了什么ProductCode,以便我可以将它作为变量添加到RegistryValue Wix元素?

我猜测没有,所以我尝试使用<?define?>将变量设置为所有问号"????????-????-????-????-????????????",并在Product元素中使用此变量以及RegistryValue元素。这适用于Product元素,它会继续生成新的GUID,但在RegistryValue元素中,此变量在编译时不会展开,这意味着注册表项只会添加所有问号。

有没有纯粹的Wix方式来实现我想要的?我可以在Wix之外生成ProductCode并让Wix元素将其用作环境变量,但这会给构建过程增加额外的复杂性 - 这可能会破坏其他内容。如果我能用Wix完全做到这一点,我想要它。

1 个答案:

答案 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>