Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Installation 在WiX捆绑包中,如果我不';找不到注册表项?_Installation_Wix_Burn - Fatal编程技术网

Installation 在WiX捆绑包中,如果我不';找不到注册表项?

Installation 在WiX捆绑包中,如果我不';找不到注册表项?,installation,wix,burn,Installation,Wix,Burn,我需要编写一个WiX包,除非系统上存在某个注册表项,否则它不会运行 在一个普通的安装项目中,我会使用一个启动条件,但我不是在编写安装项目,而是在编写顶级包。元素有一个条件属性,但在刻录手册中它说: 束的状态。如果不满足条件,捆绑包将拒绝运行。在加载引导程序应用程序之前(检测之前)会检查条件,因此只能引用内置变量,例如指示操作系统版本的变量 因此,除了最基本的高级检查之外,我似乎不能使用Bundle元素的Condition属性,当然也不能用于我需要的内容 那么,我如何在bundle级别检查注册表项

我需要编写一个WiX包,除非系统上存在某个注册表项,否则它不会运行

在一个普通的安装项目中,我会使用一个启动条件,但我不是在编写安装项目,而是在编写顶级包。
元素有一个
条件
属性,但在刻录手册中它说:

束的状态。如果不满足条件,捆绑包将拒绝运行。在加载引导程序应用程序之前(检测之前)会检查条件,因此只能引用内置变量,例如指示操作系统版本的变量

因此,除了最基本的高级检查之外,我似乎不能使用
Bundle
元素的
Condition
属性,当然也不能用于我需要的内容


那么,我如何在bundle级别检查注册表项,并在注册表项不存在时拒绝继续?

您肯定可以在bundle中执行注册表搜索,然后根据这些注册表搜索的结果确定一个条件,因为我在几个bootstrapper项目中正是这样做的。不完全确定文档所指的是什么,但它要么是过时的,要么就是错误的

我举了一个简单的例子:

<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>

服务器已安装或WixBundleInstalled
如果您的捆绑包找不到ServerPath key@HKLM\SOFTWARE\$(var.OEMRegistryRooteKeyName),这将停止安装

我还添加了
或WixBundleInstalled
,因为您可能会遇到这样的问题:客户以某种方式卸载了引导程序中包含的所有或部分软件包(包括注册表搜索所依赖的软件包),然后您将永远无法卸载引导程序,直到您手动重新添加注册表项