在C#中读取registry项

我开发了一个应用程序并将其安装在客户端计算机上。 在我的应用程序,我需要得到它的安装path。 我的应用程序有一个registry项:

HKEY_LOCAL_MACHINE\SOFTWARE\MyApplication\[AppPath] 

我如何使用C#读取AppPath

看到这个http://www.codeproject.com/Articles/3389/Read-write-and-delete-from-registry-with-C

更新:

您可以使用Microsoft.Win32命名空间下的RegistryKey类。

RegistryKey一些重要function如下:

 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 

你正在寻找狡猾的Registry.GetValue方法 。

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

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

 using Microsoft.Win32; 

为了工作,虽然。

您可以使用以下来获取registry认为它已安装的位置:

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

或者,您可以使用以下内容来查找应用程序实际从何处启动的位置:

 System.Windows.Forms.Application.StartupPath 

后者比前者更可靠,如果您试图使用.exe位置作为相对path来查找相关文件。 用户可以在安装之后轻松地移动,并且仍然可以正常工作,因为.NET应用程序并不依赖于registry。

使用StartupPath ,你甚至可以做一些巧妙的事情,比如让应用程序在运行时更新registry项,而不是由于丢失/错误/损坏的条目而导致崩溃。

并且一定要将应用程序设置function看作是存储值而不是registry( Properties.Settings.Default.mySettingEtc )。 您可以读取/写入在标准位置保存为简单MyApp.exe.config文件的应用程序和/或用户级别的设置。 从过去(好的旧的Win 3.1 / DOS的日子)的一个很好的爆炸,让应用程序安装/删除是一个简单的复制/删除一个或两个文件夹结构,而不是一些复杂的,神秘的安装/卸载例程,留下各种垃圾在registry中并撒满硬盘。

如果您希望将其转换为特定types,则可以使用此方法。 大多数非基元types默认情况下不支持直接投射,所以你将不得不相应处理。

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

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