2012-01-25 10 views
6

में रजिस्ट्री उपकुंजियों की गणना करें मैं सर्वर पर एक MySQL के संस्करण के आधार पर क्लाइंट मशीन पर ड्राइवर स्थापित करने का प्रयास कर रहा हूं और ऐसा करने के लिए मैं रजिस्ट्री कुंजी के माध्यम से सर्वर पर संस्करण को देखना चाहता हूं।डेल्फी

उसने कहा, मुझे HKEY_LOCAL_MACHINE\SOFTWARE\MySQL AB की उपकुंजी को गिनने की आवश्यकता है। आमतौर पर इस के तहत केवल एक कुंजी होती है और यह आम तौर पर फॉर्म का है: MySQL Server #.#, जहां # एक संख्या के लिए खड़ा है।

लेकिन क्योंकि मुझे नहीं पता कि वे कौन से मूल्य हैं, क्या कुंजी प्राप्त करने का कोई तरीका है और फिर मैं नाम से संख्याएं प्राप्त कर सकता हूं यह निर्धारित करने के लिए कि कौन सा ड्राइवर स्थापित करना है? मैं सोच रहा हूं कि कुंजी प्राप्त करने का सबसे अच्छा तरीका उपकुंजियों का आकलन करना है, लेकिन शायद एक चालाक स्ट्रिंग स्वरूपण और लूप भी काम करेगा?

उत्तर

11

सबसे अच्छा समाधान उप कुंजी का आकलन करना है। RegEnumKeyEx का उपयोग करके आप बस एक साधारण लूप में ऐसा करते हैं जब तक कि गणना करने के लिए कोई और कुंजी शेष न हो।

हालांकि, TRegistry का उपयोग कर डेल्फी में उप कुंजी की गणना भी आसान अभी भी है:

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 बिट ओएस पर 32 बिट डेल्फी प्रक्रिया में आपको चरण रजिस्ट्री पुनर्निर्देशन की आवश्यकता होगी। TRegistry कन्स्ट्रक्टर को पास करके ऐसा करें।


विकल्प है कि आप प्रस्ताव कठिन कोड सभी संभव संस्करण स्ट्रिंग के अपने आवेदन में मान रहा है। यह एक विफलता की तरह लगता है जैसे ही एक संस्करण जारी किया जाता है जो आपकी हार्ड कोडित सूची में नहीं है।

+0

धन्यवाद! यह वही था जो मैं खोज रहा था, बहुत आसान। साथ ही, किसी और के लिए जो कुछ ऐसा कर सकता है, मैंने रिमोट कंप्यूटर से कनेक्ट करने के लिए रजिस्ट्री. रजिस्ट्री कनेक्ट ('कुछआईपी') का उपयोग किया। – Aaron