我正在尝试在 Wix 中组合一个小的“先决条件”对话框,以让用户相信他们拥有运行我的软件所需的所有必需品:
例如,我需要托管 DirectX,所以我寻找一些 DLL:
<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 来组合我的条件逻辑:
<CustomAction Id="SetManagedDirectXInstalled"
Property="MANAGED_DIRECTX_INSTALLED"
Value="NOT([MANAGED_DIRECTX] = '') AND NOT ([MANAGED_DIRECTX_DIRECTINPUT] = ''")/>
此 CustomAction 是按顺序排列的:
<InstallExecuteSequence>
<Custom Action="SetManagedDirectXInstalled" After="AppSearch" />
<RemoveExistingProducts After="InstallInitialize" />
</InstallExecuteSequence>
我现在应该能够做的是使用“MANAGED DIRECTX INSTALLED”来做一些事情,例如
<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 命令不会在任何地方显示 MANAGED DIRECTX INSTALLED 属性。
当 <Condition> 与以下内容一起使用时,它会成功阻止安装(尽管在这种情况下我不再想阻止安装,只是建议)。
<Condition Message="You must have Microsoft Managed DirectX (MDX) for DirectX 9.0 installed">
MANAGED_DIRECTX AND MANAGED_DIRECTX_DIRECTINPUT
</Condition>
我怎样才能跟踪/调试这个(或者我做错了什么?)
编辑- 我现在确定我的 CustomAction 甚至没有被调用,将其设置为以下也没有显示预期的结果!
<CustomAction Id='SetManagedDirectXInstalled'
Property='MANAGED_DIRECTX_INSTALLED'
Value='Something hard-coded'/>
或者
<CustomAction Id='SetManagedDirectXInstalled'
Error='Some error should show!'/>