Προγραμματισμός

Τρόπος πρόσβασης στο μητρώο των Windows χρησιμοποιώντας το C #

Το Microsoft .Net σάς επιτρέπει να έχετε πρόσβαση στο Μητρώο των Windows μέσω προγραμματισμού για την αποθήκευση και ανάκτηση δεδομένων. Το μητρώο των Windows είναι μια ιεραρχική βάση δεδομένων που αποτελείται από μια συλλογή πλήκτρων, δευτερευόντων κλειδιών, προκαθορισμένων κλειδιών, κυψελών και καταχωρίσεων αξίας και μπορεί να χρησιμοποιηθεί για την αποθήκευση δεδομένων συγκεκριμένων συστημάτων ή συγκεκριμένων εφαρμογών. Το MSDN δηλώνει: "Το μητρώο λειτουργεί ως κεντρικό αποθετήριο πληροφοριών για το λειτουργικό σύστημα και τις εφαρμογές σε έναν υπολογιστή."

Μπορείτε να επωφεληθείτε από το μητρώο των Windows για να αποθηκεύσετε μεταδεδομένα διαμόρφωσης των εφαρμογών σας, ώστε να μπορείτε να τα ανακτήσετε σε μεταγενέστερο χρονικό σημείο, εάν χρειαστεί.

Το μητρώο των Windows αποθηκεύει τους ακόλουθους τύπους πληροφοριών με ιεραρχικό τρόπο.

  1. Πληροφορίες προφίλ χρήστη
  2. Πληροφορίες υλικού του συστήματός σας
  3. Ρυθμίσεις ιδιοκτησίας
  4. Πληροφορίες για εγκατεστημένα προγράμματα στο σύστημά σας

Σημειώστε ότι πρέπει να είστε ιδιαίτερα προσεκτικοί όταν χειρίζεστε το μητρώο των Windows. Συνιστάται να δημιουργήσετε αντίγραφα ασφαλείας του μητρώου σας προτού κάνετε οποιεσδήποτε αλλαγές, ώστε να μπορείτε να επαναφέρετε αυτές τις αλλαγές εάν χρειαστεί. Μπορείτε να δημιουργήσετε ένα αντίγραφο ασφαλείας του μητρώου των Windows ακολουθώντας αυτά τα βήματα.

  1. Από την Έναρξη, επιλέξτε Εκτέλεση
  2. Πληκτρολογήστε Regedit και πατήστε Enter για να καλέσετε τον Windows Registry Editor
  3. Τώρα κάντε κλικ στο Αρχείο -> Εξαγωγή
  4. Στο παράθυρο διαλόγου "Αποθήκευση ως" καθορίστε ένα όνομα
  5. Επιλέξτε έναν συγκεκριμένο κλάδο ή την επιλογή "Όλα" για εξαγωγή ολόκληρων των πληροφοριών μητρώου
  6. Κάντε κλικ στην Αποθήκευση

Οι πληροφορίες μητρώου θα αποθηκευτούν σε ένα αρχείο .reg με το όνομα που καθορίσατε. Τώρα είστε ασφαλείς να χειριστείτε τη βάση δεδομένων μητρώου μέσω προγραμματισμού.

Εργασία με το μητρώο των Windows στο C #

Μπορείτε να διαβάσετε, να γράψετε και να διαγράψετε μέσω προγραμματισμού πλήκτρα, δευτερεύοντα κλειδιά και τιμές από το μητρώο των Windows. Μπορείτε να θεωρήσετε ότι τα κλειδιά μητρώου είναι φακέλοι στο σύστημα των Windows. Σημειώστε ότι ένα κλειδί μπορεί να έχει δευτερεύοντα πλήκτρα - με τον ίδιο τρόπο που ένας φάκελος μπορεί να περιέχει υποφακέλους μέσα σε αυτό. Για να εργαστείτε με το μητρώο των Windows χρησιμοποιώντας το C #, μπορείτε να επωφεληθείτε από την κλάση μητρώου στο χώρο ονομάτων Microsoft.Win32.

Ας βρούμε τώρα κάποιο κωδικό. Σε αυτήν την ενότητα θα διερευνήσουμε πώς μπορούμε να δημιουργήσουμε, να διαβάσουμε ή να διαγράψουμε δευτερεύοντα κλειδιά από το μητρώο των Windows χρησιμοποιώντας το C #.

Για να δημιουργήσετε ένα νέο δευτερεύον κλειδί μπορείτε να επωφεληθείτε από τη μέθοδο CreateSubKey όπως φαίνεται παρακάτω.

Registry.CurrentUser.CreateSubKey (@ "ΛΟΓΙΣΜΙΚΟ \");

Η μέθοδος CreateSubKey δημιουργεί ένα νέο δευτερεύον κλειδί και το επιστρέφει - ο τύπος επιστροφής είναι RegistryKey. Το παρακάτω απόσπασμα κώδικα δείχνει πώς μπορείτε να δημιουργήσετε ένα νέο δευτερεύον κλειδί με όνομα και κλειδί αποθήκευσης - τιμές μέσα σε αυτό.

χρησιμοποιώντας (RegistryKey key = Registry.CurrentUser.CreateSubKey (@ "ΛΟΓΙΣΜΙΚΟ \"))

           {

key.SetValue ("Κλειδί 1", "Τιμή 1");

key.SetValue ("Κλειδί 2", "Τιμή 2");

κλειδί. Κλείσιμο ();

           }  

Η ακόλουθη μέθοδος μπορεί να χρησιμοποιηθεί για την ανάγνωση μιας τιμής από ένα δευτερεύον κλειδί.

στατική συμβολοσειρά ReadSubKeyValue (συμβολοσειρά subKey, πλήκτρο συμβολοσειράς)

       {

string str = string. Κενό;

χρησιμοποιώντας (RegistryKey registryKey = Registry.CurrentUser.OpenSubKey (subKey))

           {

εάν (registryKey! = null)

               {

str = registryKey.GetValue (κλειδί). ToString ();

registryKey.Close ();

               }

           }

επιστροφή str;

       }

Η μέθοδος ReadSubKeyValue δέχεται ένα δευτερεύον κλειδί και ένα κλειδί ως παράμετρο και επιστρέφει την τιμή από αυτό. Δείτε πώς μπορείτε να καλέσετε τη μέθοδο ReadSubKeyValue.

static void Main (συμβολοσειρά [] args)

       {

string subKey = @ "ΛΟΓΙΣΜΙΚΟ \";

string str = ReadSubKeyValue (subKey, "Κλειδί 1");

Κονσόλα.WriteLine (str);

Κονσόλα. Διαβάστε ();

       }

Μπορείτε επίσης να διαγράψετε ένα δευτερεύον κλειδί χρησιμοποιώντας τη στατική μέθοδο DeleteSubKey. Η ακόλουθη λίστα κωδικών δείχνει πώς μπορείτε να το κάνετε αυτό.

static bool DeleteKey (συμβολοσειρά KeyName)

       {

δοκιμάστε

           {

Registry.CurrentUser.DeleteSubKey (KeyName);

επιστροφή αληθινή?

           }

σύλληψη

           {

επιστροφή ψευδής?

           }

       }

Η παραπάνω μέθοδος επιστρέφει αληθής εάν η διαγραφή του δευτερεύοντος κλειδιού είναι επιτυχής, ψευδώς διαφορετικά Ίσως θέλετε να ελέγξετε αν το δευτερεύον κλειδί υπάρχει πριν επιχειρήσετε να το διαγράψετε - με αυτόν τον τρόπο οι αλλαγές των εξαιρέσεων που ρίχνονται είναι ελάχιστες. Σας αφήνω να τροποποιήσετε τον παραπάνω κώδικα για να ενσωματώσετε αυτήν την αλλαγή.

Μπορείτε επίσης να ανακτήσετε όλα τα δευτερεύοντα κλειδιά ενός συγκεκριμένου κλειδιού χρησιμοποιώντας τη μέθοδο GetSubKeyNames της κλάσης RegistryKey. Το παρακάτω απόσπασμα κώδικα δείχνει πώς μπορεί να επιτευχθεί αυτό.

στατική λίστα GetChildSubKeys (πλήκτρο συμβολοσειράς)

       {

Λίστα lstSubKeys = νέα λίστα ();

δοκιμάστε

          {

χρησιμοποιώντας (RegistryKey registryKey = Registry.CurrentUser.OpenSubKey (κλειδί))

               {

εάν (! (registryKey == null))

                   {

string [] temp = registryKey.GetSubKeyNames ();

foreach (string string in temp)

                       {

lstSubKeys.Add (str);

                       }

                   }

               }

           }

σύλληψη

           {

// Γράψτε εδώ τον προσαρμοσμένο κωδικό χειρισμού εξαιρέσεων

           }

επιστροφή lstSubKeys;

       }

Για να χρησιμοποιήσετε τη μέθοδο GetChildSubKeys και να ανακτήσετε όλα τα δευτερεύοντα κλειδιά ενός συγκεκριμένου κλειδιού, μπορείτε να γράψετε τον ακόλουθο κώδικα.

Λίστα lstSubKeys = GetChildSubKeys (subKey);

$config[zx-auto] not found$config[zx-overlay] not found