Registry.GetValue会自动扩展环境变量 - 任何避免这种情况的方法?

时间:2014-09-29 20:18:42

标签: c# .net registry

使用Registry.GetValue(key, name, null)时,而不是:

C:\Windows\system32

我想检索原始注册表项:

%SystemRoot%\system32

这在C和WinAPI中是可行的,但是我没有办法用.NET做到这一点。

2 个答案:

答案 0 :(得分:4)

您需要传递RegistryValueOptions.DoNotExpandEnvironmentNames。例如:

var key = @"SOFTWARE\Classes\.library-ms\ShellNew";
var name = "IconPath";

var regval = Registry.LocalMachine.OpenSubKey(key).GetValue(name, "",
RegistryValueOptions.DoNotExpandEnvironmentNames);

Console.WriteLine(regval);

输出是: %SYSTEMROOT%\ System32下\ imageres.dll,-1001

答案 1 :(得分:0)

据我所知,默认情况下它会做你想要的事情:

Registry.SetValue(@"HKEY_CURRENT_USER\dummy", "pathTest", @"%SystemRoot%\system32");
Console.WriteLine(Registry.GetValue(@"HKEY_CURRENT_USER\dummy", "pathTest", null));

// Output:
// %SystemRoot%\system32