Чтение ключа реестра в C # - PullRequest
48 голосов
/ 17 декабря 2010

Я разработал приложение и установил его на клиентском компьютере.В моем приложении мне нужно получить путь его установки.В моем приложении есть запись в реестре:

HKEY_LOCAL_MACHINE\SOFTWARE\MyApplication\[AppPath]

Как мне прочитать AppPath с помощью C #?

Ответы [ 6 ]

112 голосов
/ 17 декабря 2010

Вы ищете хитро названный метод Registry.GetValue .

73 голосов
/ 17 декабря 2010
string InstallPath = (string)Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\MyApplication\AppPath", "Installed", null);    
if (InstallPath != null)
{
    // Do stuff
}

Этот код должен получить ваше значение.Вы должны быть

using Microsoft.Win32;

, чтобы это работало

27 голосов
/ 17 декабря 2010

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

Обновлено:

Вы можете использовать RegistryKey класс в Microsoft.Win32 пространстве имен.

Вот некоторые важные функции RegistryKey:

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
7 голосов
/ 19 августа 2013

Если вы хотите, чтобы он был приведен к определенному типу, вы можете использовать этот метод. Большинство не примитивных типов по умолчанию не поддерживают прямое приведение, поэтому вам придется обрабатывать их соответствующим образом.

  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 голосов
/ 04 октября 2012

Вы можете использовать следующее, чтобы определить, где реестр считает, что он установлен:

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

Или вы можете использовать следующее, чтобы узнать, откуда на самом деле запускается приложение:

System.Windows.Forms.Application.StartupPath

Последний более надежен, чем первый, если вы пытаетесь использовать местоположение .exe в качестве относительного пути для поиска связанных файлов. Пользователь может легко перемещать вещи после установки и при этом приложение будет работать нормально, поскольку приложения .NET не так зависят от реестра.

Используя StartupPath, вы можете даже сделать что-то умное, например, заставить ваше приложение обновлять записи реестра во время выполнения, а не сбоить из-за отсутствия / неправильных / поврежденных записей.

И обязательно посмотрите на функциональность настроек приложения как хранилище значений, а не как реестр (Properties.Settings.Default.mySettingEtc). Вы можете читать / записывать настройки для приложения и / или пользовательских уровней, которые сохраняются в виде простых файлов MyApp.exe.config в стандартных местах. Хороший взрыв из прошлого (старые добрые времена Win 3.1 / DOS), когда установка / удаление приложения была простой копией / удалением структуры папок или двух, а не какой-то сложной запутанной подпрограммой установки / удаления, которая оставляет все виды мусора в реестре и посыпать всем жестким диском.

1 голос
/ 03 июня 2016

с использованием 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"; }
                }
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...