C# Registry.GetValue会自动扩展环境变量-有没有办法避免这种情况?

C# Registry.GetValue会自动扩展环境变量-有没有办法避免这种情况?,c#,.net,registry,C#,.net,Registry,当使用注册表.GetValue(key,name,null)而不是: C:\Windows\system32 我想检索原始注册表项: %SystemRoot%\system32 这在使用WinAPI的C中是可能的,但我看不到使用.NET实现这一点的方法。您需要传递它RegistryValueOptions.DonoteExpandEnvironmentNames。例如: var key = @"SOFTWARE\Classes\.library-ms\ShellNew"; var name

当使用注册表.GetValue(key,name,null)而不是:

C:\Windows\system32
我想检索原始注册表项:

%SystemRoot%\system32

这在使用WinAPI的C中是可能的,但我看不到使用.NET实现这一点的方法。

您需要传递它
RegistryValueOptions.DonoteExpandEnvironmentNames
。例如:

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

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

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

// Output:
// %SystemRoot%\system32

try:
const string systemPath=@“HKEY\U LOCAL\U MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment”;var result=Registry.GetValue(systemPath,“path”,null)作为字符串;Console.WriteLine(结果)
;好的,试试看。但是,至少在我的机器上,该键/值中的数据没有任何环境变量-它们已经在reg键中展开。似乎你的问题应该重新措辞,包括“对于带有
Type=REG\u EXPAND\u SZ
的注册表项”,但似乎你得到了答案,所以一切都很好。
registry.GetValue
似乎没有这个重载,但它看起来像
RegistryKey.GetValue
有-我以前没有注意到这个,我马上就去试试。@Adrian17你说得对。我已经更新了答案。