3

MS SQL 共有管理オブジェクトをインストールする 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 エディターでは、次のように表示されます

前提条件を実行するには、次の条件を満たす必要があります。ここでは、実行する必要があるかどうかを判断するために前提条件が検索するファイルとレジストリ キーを定義できます。条件がない場合、前提条件は常に実行されます。

これは私の調査結果と一致します。条件は AND で結合されます。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 に答える