sql >> Database >  >> RDS >> Oracle

Hoe test ik in WiX op het bestaan ​​van een registersleutel (geen waarde) voor Oracle ODP.Net?

OK, dus dankzij Sascha's informatie lijkt het antwoord "dat kan niet" te zijn met behulp van de ingebouwde WiX-registerfuncties.

Nu wilde ik ook dat deze test samen met de andere lanceringsconditietests zou plaatsvinden, wat het een beetje moeilijker maakt. Het heeft me behoorlijk wat tijd gekost om dit voor elkaar te krijgen, hoewel het vrij eenvoudig is nu ik weet hoe, dus hopelijk zal dit iemand anders dezelfde pijn besparen.

Maak eerst een eigenschap binnen uw WiX-product:

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

Maak vervolgens een aangepaste actie om te controleren op de sleutel en stel ODPNETINSTALLED in op "1" als deze bestaat. Ik ga hier niet in op het compileren en toevoegen van de aangepaste actie aan het installatieprogramma, maar het is vrij eenvoudig als je Votive in Visual Studio gebruikt. De code voor mijn aangepaste actie is:

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 moet je je registreren en de actie plannen, omdat ik wilde dat de waarschuwing samen met mijn andere startvoorwaarden zou verschijnen, moest ik deze toevoegen aan de InstallUI Volgorde-element:

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

Voeg ten slotte een startvoorwaarde toe om de eigenschap te controleren:

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

Merk op dat ik geloof dat planning in InstallUISequence betekent dat de aangepaste actie niet wordt uitgevoerd tijdens niet-UI-installaties. Mijn installatieprogramma moet echter een UI-installatie hebben, dus het is geen probleem voor mij.



  1. Hoe kunt u overerving in een database weergeven?

  2. Voer alleen een trigger uit wanneer bepaalde kolommen zijn bijgewerkt (SQL-server)

  3. Toegang gebruiken als CRM

  4. Excel-gegevensblad laden in Oracle-database