我正在开发的程序需要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链的信息?
我真的希望这只是一个语法问题。预先感谢您提供的任何指导。
答案 0 :(得分:1)
不。构建软件包时,将解析所有软件包类型的源文件。在运行时,Burn将对文件进行哈希处理,以确保其运行的是编译时指定的文件。
这里某处有一个功能请求,可能是创建该安装程序的安装框架的新软件包类型,或者是ExePackage从注册表获取卸载命令的功能。 https://github.com/wixtoolset/issues/issues