在使用UAC的系统中,WiX安装条件在修复期间失败

时间:2010-11-12 17:53:51

标签: installation wix uac

我在维护模式下遇到安装条件问题,只有在具有UAC的系统中才会出现问题。我正在进行注册表搜索以设置安装条件中使用的几个属性。这在初始安装期间有效,但是当我尝试进行修复或修改功能选择时,安装条件失败,我收到安装条件失败的消息。

这就是我的wix源代码:

<Product Id="MyProduct" ... >
  <Package InstallPrivileges="elevated" ... />
  <Condition Message="This installtion requires product X or Y. 
                      Setup will now quit.">
    <![CDATA[(MYPROPERTY1 OR MYPROPERTY2)]]>
  </Condition>

  <Property Id="MYPROPERTY1">
    <RegistrySearch Id="MySearch1"
                    Root="HKLM"
                    Key="Software\Company\ProductX"
                    Name="Installed"
                    Type="raw"
                    Win64="no"/>
  </Property>
  <Property Id="MYPROPERTY2">
    <RegistrySearch Id="MySearch2"
                    Root="HKLM"
                    Key="Software\Company\ProductY"
                    Name="Installed"
                    Type="raw"
                    Win64="no"/>
  </Property>

  <!-- ... Features and components and stuff ... -->
</Product>

我假设UAC阻止我的注册表搜索发生,但我认为将InstallPrivileges设置为“已提升”会在修复期间导致UAC提示。我从来没有得到过UAC提示,修复失败了。如果我禁用UAC,则修复按预期工作。我在这里错过了什么吗?

编辑:我应该指出,只有当我从ARP中选择“更改”,然后选择修复时才会发生故障。如果我直接从ARP选择“修复”,它会按预期工作。

1 个答案:

答案 0 :(得分:4)

记录修复以查看AppSearch正在设置的属性。还要考虑在您的条件中加上“或已安装”,以便条件仅适用于初始安装期间。没有什么比无法安装产品B更令人讨厌的了,因为产品A首先被卸载了。

更新:好日志和坏日志中的AppSearch表现完全相同。问题是您没有在属性元素上放置@Secure属性,因此未在SecureCustomProperties属性中列出。如果你查看日志,你会发现一行“忽略不允许的财产”。欲了解更多信息,请阅读:

Reasons why your setup may fail on Windows Vista