【问题标题】:Wix: check for Oracle databaseWix:检查 Oracle 数据库
【发布时间】:2013-11-19 17:14:00
【问题描述】:

如何通过 WIX 代码检查机器上是否存在 Oracle 数据库?我想创建条件,它将在安装前检查它,如果没有安装 Oracle 数据库,它将停止安装。类似的东西:

<Property Id="ORACLE_DB_INSTALLED">
    <!-- ? -->
</Property>
<Condition Message="Application requires Oracle database.">
    Installed OR ORACLE_DB_INSTALLED
</Condition>

我相信通过RegistrySearchFileSearch 元素是可能的(我实际上不知道要搜索什么)。也许,有任何扩展可用于这些目的?

谢谢,欢迎提出任何建议。

【问题讨论】:

    标签: oracle wix wix3.7


    【解决方案1】:

    对于每个 Oracle 安装,“Oracle 清单”中都有一个条目。默认情况下,Oracle 清单位于“C:\Program Files\Oracle\Inventory”下。但是,此位置可以更改。

    在注册表中,Oracle 清单的位置在“HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE”中,您可以在其中找到键“inst_loc”。

    请注意,此密钥存在于每台安装了 Oracle 产品(不仅是数据库)的机器上,因此这可能不是您要查找的内容,但它是一个起点...

    【讨论】:

      【解决方案2】:

      谢谢@SimonKrenger,这是一个很好的起点。这是我发现的:

      1) HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE 键下的参数inst_loc 包含库存路径。我找到了这样的 XML 文件:inst_loc/ContentsXML/inventory.xml,据我所知,它列出了所有已安装的 Oracle 产品。此文件中有用的部分是HOME_LIST。例如:

      <HOME_LIST>
        <HOME NAME="KEY_OraDd11g_home1" LOC="..." />
        <HOME NAME="KEY_OraClient11g_home1" LOC="..." />
        ...
      </HOME_LIST>
      

      每个HOME 条目都包含Oracle 主目录名称及其位置。因此,您可以检查 home name 是否包含特定的子字符串,即 "Db11g""Client10g"(但是,也许这是个坏主意,我不知道创建这些名称的规则)。

      2)HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE 应包含子键,其名称与模式:KEY_{oracle_home_name}(如 KEY_OraDd11g_home1)。此类子项具有包含产品安装路径的ORACLE_HOME 字符串参数。因此,可以检查安装文件夹是否存在或包含一些特定文件。

      出于我的需要,我在 C# 中创建了 WiX 自定义操作 以执行后续步骤:

      • 检查HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE 是否存在
      • 尝试通过KEY_*Db10g*模式查找子键(我需要安装10g版本)
      • 从找到的子项中获取带有安装路径的ORACLE_HOME参数
      • 检查安装路径和多个文件是否存在

      另外,这里也有类似的问题:Detecting if an Oracle Database is Installed

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-09-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多