source

WiX에서 Oracle ODP.Net에 대한 레지스트리 키(값이 아님)가 있는지 테스트하려면 어떻게 해야 합니까?

nicesource 2023. 6. 23. 22:17
반응형

WiX에서 Oracle ODP.Net에 대한 레지스트리 키(값이 아님)가 있는지 테스트하려면 어떻게 해야 합니까?

특히 Oracle ODP.Net이 시스템에 설치되어 있는지 테스트하려고 합니다.HKLM\SOFTWARE\ORACLE\ODP.NET 레지스트리 키를 테스트하여 이 작업을 수행하고자 합니다.

ODP.Net에서 사용하는 실제 값은 HKLM\SOFTWARE\ORACLE\ODP.NET\2.111.6.20에 저장되지만 Oracle에서 업데이트를 릴리스함에 따라 이 하위 수준 키의 이름이 변경될 것으로 예상됩니다.

(기본값) 값이 실제로 존재하지 않거나 null이기 때문에 실패하는 다음을 시도했습니다(레지스트리에 정확히 어떻게 표시되는지 잘 모르겠습니다).

<Property Id="ORACLE_ODPNET">
  <RegistrySearch Id="ODPNET_RegKey" Type="raw" Root="HKLM" Key="SOFTWARE\ORACLE\ODP.NET" Name="(Default)"/>
</Property>
<Condition Message="This setup requires ODP.Net to be installed.">
  Installed OR ORACLE_ODPNET
</Condition>

따라서 다음 중 하나가 저에게 도움이 될 것입니다.

  • 아래에 값이 없는 레지스트리 키를 검색하는 방법입니다.
  • 와일드카드를 포함하는 경로를 사용하여 레지스트리 값을 검색하는 방법
  • 설치 중인 ODP.Net을 테스트하는 더 좋은 방법

좋습니다. Sascha의 정보 덕분에 내장된 WiX 레지스트리 기능을 사용하면 "할 수 없습니다"라는 답이 나온 것 같습니다.

저는 또한 이 테스트가 다른 발사 조건 테스트와 함께 이루어지길 원했는데, 이 테스트는 그것을 좀 더 어렵게 만듭니다.이것을 작동시키는 것은 꽤 시간이 걸렸지만, 이제 저는 방법을 알고 있기 때문에, 이것이 다른 누군가에게 같은 고통을 덜어줄 수 있기를 바랍니다.

먼저 WiX 제품 내부에 속성을 만듭니다.

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

그런 다음 사용자 지정 작업을 만들어 키를 확인하고 키가 있는 경우 ODPNET INSTALLED를 "1"로 설정합니다.여기서는 사용자 지정 작업을 컴파일하고 설치 프로그램에 추가하는 작업에 대해 설명하지는 않겠지만 Visual Studio에서 Votive를 사용하면 매우 간단합니다.사용자 지정 작업의 코드는 다음과 같습니다.

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

이제 작업을 등록하고 예약해야 합니다. 다른 시작 조건과 함께 경고가 표시되기를 원했기 때문에 설치에 추가해야 했습니다.UIS 시퀀스 요소:

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

마지막으로 시작 조건을 추가하여 속성을 확인합니다.

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

InstallUIequence에서 스케줄링을 수행하면 UI가 아닌 설치 중에 사용자 지정 작업이 실행되지 않습니다.하지만 제 설치 프로그램은 UI가 설치되어 있어야 하므로 저에게는 문제가 되지 않습니다.

RegistrySearch/@Name을(를) 생략하여 "(기본)" 값을 가져옵니다.안타깝게도 재귀 검색을 수행할 방법이 없습니다. 릴리스 간에 안정적인 "알려진" 레지스트리 키를 선택하고 이를 기반으로 검색해야 합니다.

<Property Id="ORACLE_ODPNET">
  <RegistrySearch Id="ODPNET_RegKey" Type="raw" Root="HKLM" Key="SOFTWARE\ORACLE\ODP.NET" />
</Property>
<Condition Message="This setup requires ODP.Net to be installed.">
  Installed OR ORACLE_ODPNET
</Condition>

언급URL : https://stackoverflow.com/questions/1327203/in-wix-how-do-i-test-for-the-existence-of-a-registry-key-not-value-for-oracle

반응형