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

Fal*_*nne 1 wix wix3 wix3.7

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

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

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

是否有任何纯粹的Wix方式来实现我想要的?我可以生成ProductCodeWix 的外部并让Wix元素将其用作环境变量,但这会给构建过程增加额外的复杂性 - 其他可能会破坏的东西.如果我能用Wix完全做到这一点,我想要它.

Yan*_*nko 8

产品代码始终作为属性提供,无论您放入什么内容@ProductCode.因此,以下内容适用于您的情况:

<RegistryKey Root="HKLM" Key="My Product">
   <RegistryValue Name="TheProductCode" Type="string" Value="[ProductCode]" KeyPath="yes" />
</RegistryKey>
Run Code Online (Sandbox Code Playgroud)

此外,它不仅可以放在注册表值中,还可以放在注册表项名称中:

<RegistryKey Root="HKLM" Key="$(var.RegistryRoot)\[ProductCode]">
   ...
</RegistryKey>
Run Code Online (Sandbox Code Playgroud)