首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何检查CustomAction的属性(Wix)?

如何检查CustomAction的属性(Wix)?
EN

Stack Overflow用户
提问于 2009-06-18 14:54:54
回答 2查看 3.8K关注 0票数 1

我试图在Wix中设置一个小的“先决条件”对话框,让用户相信他们拥有运行我的软件所需的所有东西:

例如,我需要托管DirectX,所以我寻找一些DLL:

代码语言:javascript
运行
复制
<Property Id="MANAGED_DIRECTX">
  <DirectorySearch Path="$(env.SystemRoot)\Microsoft.NET\DirectX for Managed Code\1.0.2902.0" Depth="0" Id="MDXDir">
    <FileSearch Name="Microsoft.DirectX.dll"/>
  </DirectorySearch>
</Property>

<Property Id="MANAGED_DIRECTX_DIRECTINPUT">
  <DirectorySearch Path="$(env.SystemRoot)\Microsoft.NET\DirectX for Managed Code\1.0.2902.0" Depth="0" Id="MDXInputDir">
    <FileSearch Name="Microsoft.DirectX.DirectInput.dll"/>
  </DirectorySearch>
</Property>

我还有一个CustomAction来组合我的条件逻辑:

代码语言:javascript
运行
复制
<CustomAction Id="SetManagedDirectXInstalled"
              Property="MANAGED_DIRECTX_INSTALLED"
              Value="NOT([MANAGED_DIRECTX] = '') AND NOT ([MANAGED_DIRECTX_DIRECTINPUT] = ''")/>

对此CustomAction进行了排序:

代码语言:javascript
运行
复制
<InstallExecuteSequence>
  <Custom Action="SetManagedDirectXInstalled" After="AppSearch" />
  <RemoveExistingProducts After="InstallInitialize" />
</InstallExecuteSequence>

我现在应该能够做的是使用“托管DIRECTX安装”来做一些事情。

代码语言:javascript
运行
复制
    <Control Id="NoManagedDirectX" Type="Text" X="20" Y="50" Width="300" Height="60" Transparent="yes" NoPrefix="yes" Hidden="yes">
      <Text>Microsoft Managed DirectX (MDX) for DirectX 9.0 is NOT installed</Text>
      <Condition Action="show">NOT MANAGED_DIRECTX_INSTALLED</Condition>
    </Control>
    <Control Id="ManagedDirectX" Type="Text" X="20" Y="50" Width="300" Height="60" Transparent="yes" NoPrefix="yes" Hidden="yes">
      <Text>Microsoft Managed DirectX (MDX) for DirectX 9.0 is correctly installed</Text>
      <Condition Action="show">MANAGED_DIRECTX_INSTALLED</Condition>
    </Control>

不管我做什么,条件总是错误的(例如,没有安装),即使我知道文件在那里。使用带有/l*vx的msiexec命令不会在任何地方显示托管DIRECTX已安装的属性。

当a与下面的内容一起使用时,它成功地阻止了安装(尽管在本例中我不再想阻止安装,只需通知)。

代码语言:javascript
运行
复制
<Condition Message="You must have Microsoft Managed DirectX (MDX) for DirectX 9.0 installed">
  MANAGED_DIRECTX AND MANAGED_DIRECTX_DIRECTINPUT
</Condition>

我如何跟踪/调试这个(或者我做错了什么?)

编辑-我现在确定我的CustomAction甚至没有被调用,将其设置为下面也没有显示预期的结果!

代码语言:javascript
运行
复制
<CustomAction Id='SetManagedDirectXInstalled'
              Property='MANAGED_DIRECTX_INSTALLED'
              Value='Something hard-coded'/>

代码语言:javascript
运行
复制
<CustomAction Id='SetManagedDirectXInstalled'
              Error='Some error should show!'/>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-06-18 17:30:07

我想我可能已经找到了答案,但我无法尝试,直到我下一个在我的开发PC。

看来,我必须将这些值与TRUE/FALSE (或空字符串)进行比较,而不仅仅是期望它作为布尔值(来源)工作。

在这些表达式中,可以使用属性名称(请记住它们区分大小写)。不存在的属性名称将被视为空字符串。属性的逻辑值反映它是否已经设置--这意味着您不能简单地使用该属性来检查逻辑值:

  • 属性 如果属性已被设置并具有任何值,即使此值为false,则此值将计算为true。
  • 非财产 如果根本没有设置属性,这将计算为true。
  • 属性=真
  • 财产=假 这是检查逻辑属性值的正确方法。
票数 3
EN

Stack Overflow用户

发布于 2009-06-18 18:57:37

  1. 若要调试,请使用详细的日志文件。它将显示您的属性的状态,因为它们的变化。然后,你应该能够用这些知识来评估病情。
  2. 不久前,我在这里回答了同样的问题。使用属性名称的条件是是否存在的测试。如果属性有任何值,则属性的存在性测试计算为true。如果要检查属性的值,则需要显式地这样做。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1013140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档