OK, więc dzięki informacjom Saschy wydaje się, że odpowiedź brzmi „nie możesz” za pomocą wbudowanych funkcji rejestru WiX.
Teraz chciałem również, aby ten test odbył się wraz z innymi testami warunków uruchamiania, co nieco utrudnia. Doprowadzenie tego do pracy zajęło mi trochę czasu, chociaż teraz wiem jak to jest dość proste, więc miejmy nadzieję, że zaoszczędzi to komuś innemu tego samego bólu.
Najpierw utwórz właściwość w produkcie WiX:
<Property Id="ODPNETINSTALLED">0</Property>
Następnie utwórz niestandardową akcję, aby sprawdzić klucz i ustaw ODPNETINSTALLED na „1”, jeśli istnieje. Nie zamierzam tutaj kompilować i dodawać niestandardowej akcji do instalatora, ale jest to dość proste, jeśli używasz Votive w Visual Studio. Kod mojej akcji niestandardowej to:
using Microsoft.Deployment.WindowsInstaller;
using Microsoft.Win32;
namespace WiXCustomAction
{
public class CustomActions
{
[CustomAction]
public static ActionResult CheckOdpNetInstalled(Session xiSession)
{
xiSession.Log("Begin CheckOdpNetInstalled");
RegistryKey lKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\ORACLE\ODP.Net");
xiSession["ODPNETINSTALLED"] = lKey == null ? "0" : "1";
return ActionResult.Success;
}
}
}
Teraz musisz się zarejestrować i zaplanować akcję, ponieważ chciałem, aby ostrzeżenie pojawiło się wraz z innymi warunkami uruchamiania, musiałem dodać je do InstalacjiUI Element sekwencji:
<Binary Id="WiXCustomAction.dll" SourceFile="$(var.WiXCustomAction.TargetDir)$(var.WiXCustomAction.TargetName).CA.dll" />
<CustomAction Id="CheckOdpNet" BinaryKey="WiXCustomAction.dll" DllEntry="CheckOdpNetInstalled" Execute="immediate" />
<InstallUISequence>
<Custom Action="CheckOdpNet" Before="LaunchConditions">NOT Installed</Custom>
</InstallUISequence>
Na koniec dodaj warunek uruchomienia, aby sprawdzić właściwość:
<Condition Message="!(loc.OracleOdpCondition)">
Installed OR ODPNETINSTALLED="1"
</Condition>
Zauważ, że uważam, że planowanie w InstallUISequence oznacza, że niestandardowa akcja nie zostanie uruchomiona podczas instalacji bez interfejsu użytkownika. Jednak mój instalator musi mieć zainstalowany interfejs użytkownika, więc nie stanowi to dla mnie problemu.