3

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

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

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

有什么纯 Wix 方法可以实现我想要的吗?我可以生成ProductCodeWix 的外部并让 Wix 元素将其用作环境变量,但这为构建过程增加了额外的复杂性——其他可能会破坏的东西。如果我能纯粹用 Wix 来做这件事,我会很高兴。

4

1 回答 1

11

无论您在@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>
于 2013-09-19T06:53:39.907 回答