Подтвердить что ты не робот

Чтение раздела реестра в С#

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

HKEY_LOCAL_MACHINE\SOFTWARE\MyApplication\[AppPath]

Как читать AppPath с помощью С#?

4b9b3361

Ответ 1

см. этот 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

Ответ 3

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

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

using Microsoft.Win32;

для этого, чтобы работать, хотя.

Ответ 4

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

(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) для установки/удаления приложения - это простая копия/удаление структуры папок или две, а не некоторая запутанная, тайная процедура установки/удаления, которая оставляет все виды мусора в реестре и посыпать по всему жесткому диску.

Ответ 5

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

  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;
  }

Ответ 6

с помощью 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"; }
                }
            }
        }
    }