2012-01-25 16 views
6

私はどのバージョンのMySQLがサーバーにインストールされているかに基づいてクライアントマシンにドライバをインストールしようとしていますが、レジストリキーを使ってサーバー上のバージョンを確認したいと思います。デルファイのレジストリサブキーを列挙します

つまり、HKEY_LOCAL_MACHINE\SOFTWARE\MySQL ABのサブキーを列挙する必要があります。通常はこのキーの下に1つのキーがあり、一般的にはMySQL Server #.#という形式です。#は数字を表します。

しかし、どのような値があるのか​​わからないので、キーを取得する方法があります。次に、インストールするドライバを決定するために名前から番号を取得できますか?私はサブキーを列挙することがキーを取得する最良の方法だと思っていますが、おそらく賢明な文字列の書式設定とループも機能しますか?

答えて

11

最高の解決策は、サブキーを列挙することです。 RegEnumKeyExを使用すると、列挙するキーがなくなるまで単純なループでこれを行うだけです。

しかし、TRegistryを使用して、Delphiでサブキーを列挙することも簡単まだです:あなたが気をつけなければならない

program _EnumSubKeys; 

{$APPTYPE CONSOLE} 

uses 
    SysUtils, Classes, Windows, Registry; 

procedure EnumSubKeys(RootKey: HKEY; const Key: string); 
var 
    Registry: TRegistry; 
    SubKeyNames: TStringList; 
    Name: string; 
begin 
    Registry := TRegistry.Create; 
    Try 
    Registry.RootKey := RootKey; 
    Registry.OpenKeyReadOnly(Key); 
    SubKeyNames := TStringList.Create; 
    Try 
     Registry.GetKeyNames(SubKeyNames); 
     for Name in SubKeyNames do 
     Writeln(Name); 
    Finally 
     SubKeyNames.Free; 
    End; 
    Finally 
    Registry.Free; 
    End; 
end; 

begin 
    EnumSubKeys(HKEY_LOCAL_MACHINE, 'Software\Microsoft'); 
    Readln; 
end. 

ことの一つは、レジストリの64ビットビューで検索することです。 MySQLの64ビット版がインストールされている場合は、レジストリの64ビットビューを使用することが期待されます。 64ビットOS上の32ビットDelphiプロセスでは、ステップレジストリのリダイレクトを行う必要があります。 KEY_WOW64_64KEYTRegistryコンストラクタに渡してください。


あなたが提案する別の方法は、アプリケーションにversion stringの可能なすべての値をハードコードすることです。これはハードコードされたリストにないバージョンがリリースされるとすぐに起こるのを待っているようなものです。

+0

ありがとうございました!これは私が探していたもので、とてもシンプルです。また、同様のことをしている他の人のために、私はRegistry.RegistryConnect( 'SomeIP')を使ってリモートコンピュータに接続しました。 – Aaron

関連する問題