.Net 2.0 原汁原味读取注册表

注册表

  在.Net 1.x当中,使用Microsoft.Win32.RegistryKey类的GetValue方法读取注册表数据时,其实数据都是经过“处理”的;

  例如,某个字符串数据本来的值是%SystemRoot%\System32\IoLogMsg.dll但是用GetValue方法得到的数据却是C:\WINDOWS\System32\IoLogMsg.dll

  也就是说,在读取注册表中的字符串时,系统会自作主张地替你展开环境变量。

  这的确省去我们调用Environment.ExpandEnvironmentVariables方法的麻烦,但是反过来,当我们希望原封不动地拷贝一个注册表的字符串时则束手无策。

  在.Net2.0当中,我们惊喜地发现Microsoft.Win32.RegistryKey类有了一个小小的改动,就是其GetValue方法增添了一个新的重载:

public Object GetValue (
    string name,
    Object defaultValue,
    RegistryValueOptions options
)

  该方法的第三个参数是一个枚举,目前只有一个有用的值就是DoNotExpandEnvironmentNames。
指定该值,GetValue得到的结果就是没有经过展开的数据了。

时间: 2024-08-02 14:41:53

.Net 2.0 原汁原味读取注册表的相关文章

.Net 2.0 原汁原味读取注册表_实用技巧

在.Net 1.x当中,使用Microsoft.Win32.RegistryKey类的GetValue方法读取注册表数据时,其实数据都是经过"处理"的: 例如,某个字符串数据本来的值是%SystemRoot%\System32\IoLogMsg.dll但是用GetValue方法得到的数据却是C:\WINDOWS\System32\IoLogMsg.dll 也就是说,在读取注册表中的字符串时,系统会自作主张地替你展开环境变量. 这的确省去我们调用Environment.ExpandEnv

c++读取注册表详解

  1.读注册表 // 读取注册表 CString ReadRegisteTable(CString root,CString path, CString key) { HKEY hAppKey; LPCTSTR WINDS_SERVICE_REGISTRY_KEY=path; LPCTSTR DATA_FILE_SUB_KEY=key; char szDataFile[80]; if(root=="HKEY_LOCAL_MACHINE") { if (ERROR_SUCCESS ==

vc++-VC++ 读取注册表返回2的问题

问题描述 VC++ 读取注册表返回2的问题 我想读取一下DHCP的 IP地址,可是RegQueryValue返回来2的错误,请大侠帮我看看,是怎么回事?多谢了! int main(int argc, char* argv[]) { HKEY hTT; long lRet; //lRet=RegOpenKey(HKEY_LOCAL_MACHINE,"SYSTEMControlSet001ServicesTcpipParametersInterfaces{CF166061-CAE0-4198-923

代码-如何用VC读取注册表二进制值,比如ShutdownTime?求助~

问题描述 如何用VC读取注册表二进制值,比如ShutdownTime?求助~ 用RegQueryValueEx读取数据,应该放在哪种数据类型中呢,求有效代码~ 下面这段是自己的提取TypedURLsTime的代码.不知问题在哪.. int main() { HKEY hKey; DWORD lpType = REG_BINARY; BYTE time[64]; DWORD timeSize = sizeof(time); RegOpenKeyEx(HKEY_CURRENT_USER, "Soft

读取注册表根据Office版本获取数据库连接字段_Access

/// <summary> /// 读取注册表,根据Office版本获取数据库连接字段 /// </summary> /// <returns>数据库连接字段</returns> private string GetConnectionString() { string strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = "; RegistryKey

java读取注册表乱码问题

问题描述 用Java读取注册表时候,注册表的字段如果是中文的话会变成"?"号:....Stringkeys[]={"info"};Stringvalues[]={"中文"};Preferencesprefs=Preferences.userRoot().node("/library/fps");for(inti=0;i<keys.length;i++){prefs.put(keys[i],values[i]);}...

64位读取注册表与32位的区别

有一个读取注册表信息的程序  if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, subkeystring , 0, KEY_READ, &hKey) == ERROR_SUCCESS)/ ,在32位下完全正常,但是在64位返回值正确,但就是读不到东西.后来单步发现读不到东西,就搜64位读注册表失败,发现需要加 if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, subkeystring , 0,KEY_READ|KEY_WOW64_64KEY, &am

Advanced Installer读取注册表时将Program Files读取为Program Files (x86)的解决办法

原文:Advanced Installer读取注册表时将Program Files读取为Program Files (x86)的解决办法 今天同事在做安装包的时候,有一个读取注册表路径的需求,需要根据读取的值来写配置文件,按照常规的做法,写好了注册表搜索方法,但是在测试的时候,发现总是会将系统盘下的Program Files\xxx路径读取为Program Files (x86)\xxx,如下图所示: 之后测试了如果读取非系统盘下的此路径,不会出现这个问题. 但是这个路径一般情况下都是默认安装在

C# 多线程读取注册表,加载至TreeView_C#教程

复制代码 代码如下: using System; using System.Drawing; using System.Windows.Forms; using System.Threading; using Microsoft.Win32; namespace 星空个性化助手 { public partial class Form1 : Form { private delegate void LoadTreeView左侧( TreeNode node );//声明委托类型 public Fo