Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Trong WiX, làm cách nào để kiểm tra sự tồn tại của khóa đăng ký (không phải giá trị) cho Oracle ODP.Net

Được rồi, nhờ thông tin của Sascha, có vẻ như câu trả lời là "bạn không thể" sử dụng các chức năng đăng ký WiX tích hợp sẵn.

Bây giờ tôi cũng muốn thử nghiệm này xảy ra cùng với các thử nghiệm điều kiện khởi chạy khác, điều này khiến nó khó hơn một chút. Để làm được việc này tôi đã mất khá nhiều thời gian mặc dù bây giờ khá đơn giản, tôi biết cách làm thế nào, vì vậy hy vọng điều này sẽ giúp ai đó đỡ đau đớn tương tự.

Trước tiên, hãy tạo một thuộc tính bên trong Sản phẩm WiX của bạn:

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

Tiếp theo, tạo một hành động tùy chỉnh để kiểm tra khóa và đặt ODPNETINSTALLED thành "1" nếu nó tồn tại. Tôi sẽ không đi vào biên dịch và thêm hành động tùy chỉnh vào trình cài đặt ở đây nhưng nó khá đơn giản nếu bạn sử dụng Votive trong Visual Studio. Mã cho hành động tùy chỉnh của tôi là:

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

Bây giờ bạn cần đăng ký và lập lịch hành động, vì tôi muốn cảnh báo xuất hiện cùng với các điều kiện khởi chạy khác của mình, tôi phải thêm nó vào Giao diện người dùng Cài đặt Phần tử trình tự:

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

Cuối cùng, thêm điều kiện khởi chạy để kiểm tra thuộc tính:

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

Lưu ý rằng tôi tin rằng lập lịch trong InstallUISequence có nghĩa là hành động tùy chỉnh sẽ không được kích hoạt trong quá trình cài đặt không phải giao diện người dùng. Tuy nhiên, trình cài đặt của tôi phải có cài đặt giao diện người dùng nên đó không phải là vấn đề đối với tôi.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tìm các hàng không chứa dữ liệu số trong Oracle

  2. ORA-00932:kiểu dữ liệu không nhất quán:mong đợi - có CLOB

  3. cách thay thế ký tự có dấu trong cột varchar2 trong oracle

  4. 12c Các tính năng không được dùng nữa

  5. OracleParameter và Mệnh đề IN