sql >> Database teknologi >  >> RDS >> Oracle

Hvordan tester jeg i WiX for eksistensen af ​​en registreringsnøgle (ikke værdi) til Oracle ODP.Net

OK, så takket være Saschas information ser det ud til, at svaret er "det kan du ikke" ved at bruge de indbyggede WiX-registreringsfunktioner.

Nu ønskede jeg også, at denne test skulle ske sammen med de andre lanceringstilstandstest, hvilket gør det lidt sværere. Det har taget mig et stykke tid at få dette til at virke, selvom det er ret simpelt nu, jeg ved hvordan, så forhåbentlig vil dette spare en anden for den samme smerte.

Opret først en ejendom i dit WiX-produkt:

<Property Id="ODPNETINSTALLED">0</Property>

Opret derefter en brugerdefineret handling for at søge efter nøglen og indstil ODPNETINSTALLED til "1", hvis den findes. Jeg vil ikke gå ind i kompilering og tilføjelse af den brugerdefinerede handling til installationsprogrammet her, men det er ret simpelt, hvis du bruger Votive i Visual Studio. Koden til min tilpassede handling er:

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;
    }
  }
}

Nu skal du registrere og planlægge handlingen, fordi jeg ønskede, at advarslen skulle vises sammen med mine andre startbetingelser, jeg var nødt til at tilføje den til InstallUI Sekvenselement:

<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>

Tilføj endelig en startbetingelse for at kontrollere egenskaben:

<Condition Message="!(loc.OracleOdpCondition)">
  Installed OR ODPNETINSTALLED="1"
</Condition>

Bemærk, at jeg mener, at planlægning i InstallUISequence betyder, at den tilpassede handling ikke udløses under installationer uden brugergrænseflade. Men mit installationsprogram skal have UI-installation, så det er ikke et problem for mig.



  1. Hvordan kan jeg lave en UPDATE-sætning med JOIN i SQL Server?

  2. SQL Server AlwaysOn ( Availability Group ) Arkitektur og trin for trin installation -1

  3. Hvorfor kan jeg oprette en tabel med PRIMARY KEY på en nullbar kolonne?

  4. Kaldning af en lagret procedure inden for en lagret procedure