Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak w WiX przetestować istnienie klucza rejestru (nie wartości) dla Oracle ODP.Net?

OK, więc dzięki informacjom Saschy wydaje się, że odpowiedź brzmi „nie możesz” za pomocą wbudowanych funkcji rejestru WiX.

Teraz chciałem również, aby ten test odbył się wraz z innymi testami warunków uruchamiania, co nieco utrudnia. Doprowadzenie tego do pracy zajęło mi trochę czasu, chociaż teraz wiem jak to jest dość proste, więc miejmy nadzieję, że zaoszczędzi to komuś innemu tego samego bólu.

Najpierw utwórz właściwość w produkcie WiX:

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

Następnie utwórz niestandardową akcję, aby sprawdzić klucz i ustaw ODPNETINSTALLED na „1”, jeśli istnieje. Nie zamierzam tutaj kompilować i dodawać niestandardowej akcji do instalatora, ale jest to dość proste, jeśli używasz Votive w Visual Studio. Kod mojej akcji niestandardowej to:

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

Teraz musisz się zarejestrować i zaplanować akcję, ponieważ chciałem, aby ostrzeżenie pojawiło się wraz z innymi warunkami uruchamiania, musiałem dodać je do InstalacjiUI Element sekwencji:

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

Na koniec dodaj warunek uruchomienia, aby sprawdzić właściwość:

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

Zauważ, że uważam, że planowanie w InstallUISequence oznacza, że ​​niestandardowa akcja nie zostanie uruchomiona podczas instalacji bez interfejsu użytkownika. Jednak mój instalator musi mieć zainstalowany interfejs użytkownika, więc nie stanowi to dla mnie problemu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mogę się dowiedzieć, czy baza danych Oracle jest ustawiona na automatyczne zatwierdzanie?

  2. Usługi baz danych na AWS i Oracle Cloud Platform

  3. Jak przeliterować rok podczas formatowania daty w Oracle

  4. SQL nie wyświetla wartości null w zapytaniu nie równa się?

  5. PL/SQL — przykład podniesienia błędu aplikacji