Я пытаюсь собрать небольшой диалог «предварительных условий» в Wix, чтобы дать пользователям уверенность в том, что у них есть все необходимое для запуска моего программного обеспечения:
Например, мне нужен Managed 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>
Неважно, что я делаю, условие всегда ложно (например, не установлено), даже когда я знаю, что файлы там есть. Использование команды msiexec с параметром / l * vx нигде не показывает свойство MANAGED DIRECTX INSTALLED.
Когда используется со следующим, он успешно предотвращает установку (хотя я больше не хочу блокировать установки в этом случае, просто советую).
<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!'/>