sql >> Databáze >  >> RDS >> Oracle

Jak ve WiX otestuji existenci klíče registru (nikoli hodnoty) pro Oracle ODP.Net

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.



  1. Jak získám seznam všech tabulek v databázi pomocí TSQL?

  2. Příklady QUARTER() – MySQL

  3. Jak se počítá shlukovací faktor Oracle Index

  4. datetime to totalminute v sql