Dobře, takže díky Saschovým informacím se zdá, že odpověď je „nemůžete“ pomocí vestavěných funkcí registru WiX.
Nyní jsem také chtěl, aby tento test proběhl spolu s dalšími testy spouštěcích podmínek, což ho trochu ztěžuje. Dostat to do práce mi trvalo docela dlouho, i když teď už vím jak je to docela jednoduché, takže doufám, že to někomu jinému ušetří stejnou bolest.
Nejprve vytvořte vlastnost ve svém produktu WiX:
<Property Id="ODPNETINSTALLED">0</Property>
Dále vytvořte vlastní akci pro kontrolu klíče a nastavte ODPNETINSTALLED na "1", pokud existuje. Nebudu se zde pouštět do kompilace a přidávání vlastní akce do instalačního programu, ale je to poměrně jednoduché, pokud používáte Votive ve Visual Studiu. Kód pro moji vlastní akci je:
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;
}
}
}
Nyní se musíte zaregistrovat a naplánovat akci, protože jsem chtěl, aby se varování zobrazilo spolu s mými dalšími podmínkami spuštění, musel jsem je přidat do instalačníhoUI Sekvenční prvek:
<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>
Nakonec přidejte podmínku spuštění pro kontrolu vlastnosti:
<Condition Message="!(loc.OracleOdpCondition)">
Installed OR ODPNETINSTALLED="1"
</Condition>
Všimněte si, že věřím, že plánování v InstallUISequence znamená, že vlastní akce nebude spuštěna během instalací bez uživatelského rozhraní. Můj instalační program však musí mít nainstalované uživatelské rozhraní, takže to pro mě není problém.