Tim*_*ong 2 installation wix burn
我需要编写一个 WiX 捆绑包,除非系统上存在某个注册表项,否则该捆绑包不会运行。
\n\n在正常的安装项目中,我会使用启动条件,但我不创作安装项目,而只是创作顶级包。该<Bundle>元素有一个Condition属性,但在 Burn 手册中它说:
\n\n\n捆绑的状况。如果不满足条件,捆绑包将拒绝运行。在加载引导程序应用程序之前(检测之前)检查条件,因此只能引用内置变量,例如指示操作系统版本的变量。
\n
因此,看来除了最基本的高级检查之外,我不能使用元素Condition的 \xc2\xa0 属性进行任何操作,当然也不能用于我需要的功能。Bundle
那么,如何在捆绑包级别检查注册表项,并在该项不存在时拒绝继续?
\n您绝对可以在捆绑包中进行注册表搜索,然后根据这些注册表搜索的结果确定一个条件,因为我在几个引导程序项目中正是这样做的。不太确定文档指的是什么,但它要么已经过时,要么就是错误的。
作为一个简单的例子,我有:
<util:RegistrySearch
Id="ServerInstalledCheck"
Root="HKLM"
Key="SOFTWARE\$(var.OEMRegistryRootKeyName)"
Value="ServerPath"
Result="value"
Variable="ServerInstalled"/>
<bal:Condition Message="#(loc.ServerNotInstalledError)" >ServerInstalled OR WixBundleInstalled</bal:Condition>
Run Code Online (Sandbox Code Playgroud)
如果找不到 ServerPath 密钥 @HKLM\SOFTWARE\$(var.OEMRegistryRooteKeyName),这将阻止您的捆绑包安装
我还补充说OR WixBundleInstalled,因为您可能会遇到一个问题,即客户以某种方式卸载了引导程序中包含的全部或部分软件包(包括注册表搜索所依赖的软件包),然后您将永远无法卸载引导程序,直到您手动卸载引导程序重新添加注册表项。
| 归档时间: |
|
| 查看次数: |
527 次 |
| 最近记录: |