3

我有一个安装MS SQL Shared Management Objects的 PRQ 。如果此注册表项不存在,我有一个安装 PRQ 的条件

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{08ECC740-2B3E-45D7-860C-59B511386286}

这在用户使用不同的产品代码安装 SMO 之前工作正常 - 我们的开发团队在安装 SQL2008 时总是会发生这种情况。PRQ 启动的安装程序存在错误。

我需要一个更好的条件。我想做的是: If (Version <= wxyz || No Version found) Then install PRQ

InstallShield Prerequisite 编辑器中,它说

必须满足以下条件才能运行先决条件。您可以在此处定义先决条件将查找以确定是否应运行的文件和注册表项。如果没有条件,则先决条件将始终运行。

这与我的发现一致 - 条件是 ANDed 在一起的。XML 中是否存在一些未发布的 OR 或否定条件?我现在很烦恼,因为如果注册表中的版本 < 我正在安装的版本,我希望运行 prq。

<conditions>
    <condition Type="32" Comparison="2" 
       Path="HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\SharedManagementObjects\CurrentVersion" 
       FileName="Version" ReturnValue="10.1.2531.0">
    </condition>
</conditions>

Type="32" 是 '注册表项具有指定的版本值' 比较="2" 是 '目标系统上的数据小于指定数据'

附带问题:是否有枚举类型和比较的地方?

此比较类型没有与“目标系统上的数据小于指定数据或不存在”状态进行比较。就像现在一样,如果密钥存在于较低版本中,则一切正常 - 但如果密钥不存在(即未安装 SMO),则不会安装 PRQ。

有没有办法使这项工作?“存在具有特定版本的文件”条件确实具有如果文件的版本低于上面指定的版本(或在目标系统上未找到文件)选项。但它无法检查 SMO 安装的文件 - 用户可能已将其安装到 C: 以外的某个驱动器上。

我希望我错过了什么。你会怎么办?

4

1 回答 1

2

我通常做的不是使用抽象的东西,比如 ARP 条目来检测依赖关系。我选择依赖本身。如果您需要 DLL,请查看 DLL 是否存在,而不必担心检测到应该安装 DLL 的东西。

于 2012-10-02T21:42:43.840 回答