util:RegistrySearch变量能否与Burn中的ExePackage的SourceFile一起使用?

时间:2019-01-21 09:58:03

标签: wix bootstrapper 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链的信息?

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

1 个答案:

答案 0 :(得分:1)

不。构建软件包时,将解析所有软件包类型的源文件。在运行时,Burn将对文件进行哈希处理,以确保其运行的是编译时指定的文件。

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