【发布时间】:2019-01-22 08:48:26
【问题描述】:
我正在开发的程序需要 OBS Studio 以及其他依赖项才能运行。为方便起见,我正在构建一个 Burn 包,它将在安装主应用程序之前按正确顺序安装每个依赖项。
卸载是个问题。 OBS 有自己的卸载可执行文件,并且告诉刻录该可执行文件的位置已被证明是不可能的。安装目录在注册表中清晰可读(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 链的注册表中提取信息?
我真的希望这只是一个语法问题。提前感谢您提供的任何指导。
【问题讨论】:
标签: wix bootstrapper burn