Oracle
 sql >> Base de données >  >> RDS >> Oracle

Dans WiX, comment tester l'existence d'une clé de registre (pas de valeur) pour Oracle ODP.Net

OK, donc grâce aux informations de Sascha, il semble que la réponse soit "vous ne pouvez pas" utiliser les fonctions de registre WiX intégrées.

Maintenant, je voulais aussi que ce test se produise avec les autres tests de conditions de lancement, ce qui le rend un peu plus difficile. Il m'a fallu un certain temps pour que cela fonctionne, même si c'est assez simple maintenant que je sais comment faire, alors j'espère que cela évitera à quelqu'un d'autre la même douleur.

Créez d'abord une propriété dans votre produit WiX :

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

Créez ensuite une action personnalisée pour vérifier la clé et définissez ODPNETINSTALLED sur "1" si elle existe. Je ne vais pas entrer dans la compilation et l'ajout de l'action personnalisée au programme d'installation ici, mais c'est assez simple si vous utilisez Votive dans Visual Studio. Le code de mon action personnalisée est :

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

Vous devez maintenant vous inscrire et planifier l'action, car je voulais que l'avertissement apparaisse avec mes autres conditions de lancement, je devais l'ajouter à l'installationUI Élément de séquence :

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

Ajoutez enfin une condition de lancement pour vérifier la propriété :

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

Notez que je pense que la planification dans InstallUISequence signifie que l'action personnalisée ne sera pas déclenchée lors d'installations non-UI. Cependant, mon installateur doit avoir installé l'interface utilisateur, donc ce n'est pas un problème pour moi.