在C#中读取注册表项

时间:2010-12-17 03:41:07

标签: c# registry

我开发了一个应用程序并将其安装在客户端计算机上。在我的应用程序中,我需要获取其安装路径。我的应用程序有一个注册表项:

HKEY_LOCAL_MACHINE\SOFTWARE\MyApplication\[AppPath]

如何使用C#阅读AppPath

6 个答案:

答案 0 :(得分:112)

您正在寻找狡猾的Registry.GetValue method

答案 1 :(得分:73)

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

该代码应该得到你的价值。你需要

using Microsoft.Win32;

让它工作。

答案 2 :(得分:26)

请参阅此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 :(得分:7)

您可以使用以下命令获取注册表认为安装的位置:

(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天)的一个很好的爆炸是一个或两个文件夹结构的简单复制/删除,而不是一些令人费解,神秘的安装/卸载例程,留下各种垃圾在注册表中,洒在硬盘上。

答案 4 :(得分:7)

如果您希望将其转换为特定类型,则可以使用此方法。默认情况下,大多数非基本类型都不支持直接转换,因此您必须相应地处理这些类型。

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

答案 5 :(得分:1)

使用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"; }
                }
            }
        }
    }