web-dev-qa-db-fra.com

Lecture d'une clé de registre en C #

J'ai développé une application et je l'ai installée sur un ordinateur client. Dans mon application, je dois obtenir son chemin d'installation. Mon application a une entrée de registre à:

HKEY_LOCAL_MACHINE\SOFTWARE\MyApplication\[AppPath]

Comment lire AppPath en utilisant C #?

48
Thorin Oakenshield

voir ceci http://www.codeproject.com/Articles/3389/Read-write-and-delete-from-registry-with-C

Mise à jour:

Vous pouvez utiliser RegistryKey class sous Microsoft.Win32 espace de noms.

Certaines fonctions importantes de RegistryKey sont les suivantes:

GetValue       //to get value of a key
SetValue       //to set value to a key
DeleteValue    //to delete value of a key
OpenSubKey     //to read value of a subkey (read-only)
CreateSubKey   //to create new or edit value to a subkey
DeleteSubKey   //to delete a subkey
GetValueKind   //to retrieve the datatype of registry key
27
Javed Akram

Vous recherchez le malin nommé Registry.GetValue méthode .

113
SLaks
string InstallPath = (string)Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\MyApplication\AppPath", "Installed", null);    
if (InstallPath != null)
{
    // Do stuff
}

Ce code devrait avoir votre valeur. Vous aurez besoin d'être

using Microsoft.Win32;

pour que cela fonctionne bien.

75
Miguel

Vous pouvez utiliser ce qui suit pour savoir où le registre pense être installé:

(string)Registry.LocalMachine.GetValue(@"SOFTWARE\MyApplication\AppPath",
   "Installed", null);

Ou vous pouvez utiliser les éléments suivants pour savoir où l’application est en cours de lancement:

System.Windows.Forms.Application.StartupPath

Ce dernier est plus fiable que le premier si vous essayez d'utiliser le .exe _ location en tant que chemin relatif pour trouver des fichiers liés. L'utilisateur peut facilement déplacer des éléments après l'installation et continuer à utiliser l'application, car les applications .NET ne dépendent pas tellement du registre.

En utilisant StartupPath, vous pouvez même faire quelque chose d'intelligent, comme demander à votre application de mettre à jour les entrées de registre au moment de l'exécution au lieu de planter lamentablement à cause d'entrées manquantes/fausses/corrompues.

Et assurez-vous de regarder la fonctionnalité des paramètres de l'application comme stockage pour les valeurs plutôt que pour le registre (Properties.Settings.Default.mySettingEtc). Vous pouvez lire/écrire les paramètres de l'application et/ou des niveaux d'utilisateur enregistrés en tant que simples MyApp.exe.config fichiers dans des emplacements standard. Un joli souffle du passé (bons vieux jours de Win 3.1/DOS) pour que l’installation/suppression de l’application soit une simple copie/suppression d’une structure de dossiers ou deux plutôt que comme une routine compliquée d’installation/désinstallation complexe qui laisse toutes sortes de déchets dans le registre et saupoudré sur tout le disque dur.

7
B H

Si vous souhaitez le convertir en un type spécifique, vous pouvez utiliser cette méthode. La plupart des types non primitifs ne prendront pas en charge la diffusion directe par défaut, vous devrez donc les gérer en conséquence.

  public T GetValue<T>(string registryKeyPath, string value, T defaultValue = default(T))
  {
    T retVal = default(T);

      retVal = (T)Registry.GetValue(registryKeyPath, value, defaultValue);

      return retVal;
  }
7
C0r3yh

using Microsoft.Win32;

  string chkRegVC = "NO";
   private void checkReg_vcredist() {

        string regKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
        using (Microsoft.Win32.RegistryKey uninstallKey = Registry.LocalMachine.OpenSubKey(regKey))
        {
            if (uninstallKey != null)
            {
                string[] productKeys = uninstallKey.GetSubKeyNames();
                foreach (var keyName in productKeys)
                {

                    if (keyName == "{196BB40D-1578-3D01-B289-BEFC77A11A1E}" ||//Visual C++ 2010 Redistributable Package (x86) 
                        keyName == "{DA5E371C-6333-3D8A-93A4-6FD5B20BCC6E}" ||//Visual C++ 2010 Redistributable Package (x64) 
                        keyName == "{C1A35166-4301-38E9-BA67-02823AD72A1B}" ||//Visual C++ 2010 Redistributable Package (ia64) 
                        keyName == "{F0C3E5D1-1ADE-321E-8167-68EF0DE699A5}" ||//Visual C++ 2010 SP1 Redistributable Package (x86) 
                        keyName == "{1D8E6291-B0D5-35EC-8441-6616F567A0F7}" ||//Visual C++ 2010 SP1 Redistributable Package (x64) 
                        keyName == "{88C73C1C-2DE5-3B01-AFB8-B46EF4AB41CD}"   //Visual C++ 2010 SP1 Redistributable Package (ia64) 
                        ) { chkRegVC = "OK"; break; }
                    else { chkRegVC = "NO"; }
                }
            }
        }
    }
1
Waruna Manjula