util:RegistrySearch 变量可以在 Burn 中与 ExePackage 的 SourceFile 一起使用吗?

Can util:RegistrySearch variables be used with an ExePackage's SourceFile in Burn?

我正在开发的一个程序需要 OBS Studio 以及其他依赖项才能运行。为了方便起见,我正在构建一个 Burn 包,它将在安装主应用程序之前按正确的顺序安装每个依赖项。

卸载是个问题。 OBS 有自己的卸载可执行文件,并且告诉 Burn 该可执行文件的位置已被证明是不可能的。安装目录在注册表中清晰可读(OBS将安装目录存储为密钥的默认值):

<util:RegistrySearch
 Variable="OBS"
 Root="HKLM"
 Key="SOFTWARE\WOW6432Node\OBS Studio" />

但是我无法将变量放入 ExePackage 的 SourceFile 中,以便在卸载期间使用它。以下代码在我的尝试中失败了:

<ExePackage Id="Uninstall_OBSStudio"
 SourceFile="!(wix.OBS)\uninstall.exe"
 DetectCondition="NOT OBS_exists"
 Cache="no"
 Compressed="no" />

将变量作为“[OBS]”传递也失败,被读取为文字字符串。在条件中使用变量没有问题,但这根本行不通。我什至也尝试过将值传递给 WixVariable:

<WixVariable Id="OBS_location" Value="[OBS]" />

无济于事。到目前为止,由于我不明白的原因,util:RegistrySearch 似乎被锁定在 Burn 的某些部分之外。

我应该怎样做才能在 SourceFile 字符串中使用 RegistrySearch 变量? 我为格式化数据所做的一切都没有奏效。 Burn 甚至可以按照我尝试的方式传递数据吗?有没有更好的方法从 Burn 链的注册表中提取信息?

我真的希望这只是一个语法问题。提前感谢您提供的任何指导。

没有。当您构建捆绑包时,将解析所有包类型的源文件。在运行时,Burn 将散列文件以确保它 运行 与编译时指定的文件相同。

这里某处有一个功能请求,可能是创建该安装程序的安装框架的新包类型,或者是 ExePackage 从注册表中获取其卸载命令的能力。 https://github.com/wixtoolset/issues/issues