我想知道在64位电脑上是否有可能使用C#访问以下注册表键:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
在32位电脑上访问时,它可以正常工作,但在64位电脑上会将其重定向到HKLM\SOFTWARE\Wow6432Node的本机64位路径,其中包含不同的键。我已经查看了各种文章,但无法找到确切的答案来访问64位电脑上的32位键。谢谢。
我想知道在64位电脑上是否有可能使用C#访问以下注册表键:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
在32位电脑上访问时,它可以正常工作,但在64位电脑上会将其重定向到HKLM\SOFTWARE\Wow6432Node的本机64位路径,其中包含不同的键。我已经查看了各种文章,但无法找到确切的答案来访问64位电脑上的32位键。谢谢。
项目属性>构建
下的设置来实现。项目 + 属性,生成选项卡,平台目标 = Any CPU。从32位应用程序访问64位注册表需要使用 .NET 4 和新的 RegistryKey.OpenBaseKey() 方法,并选择 RegistryView.Registry64 选项。
这只允许你读取键值,写入键值需要进行用户账户控制(UAC)提权。你可以在不受注册表重定向影响的情况下,在 HKCU 写入键值。
它应该进行重定向。您需要检测此重定向并读取WoW6432Node键。HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run是64位注册表,只能由64位应用程序访问。
显然,您应编写支持两者的代码。
HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run
是一个无意义的键。Shell 读取 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
中的值。它可能会读取32位区域中的值,以应对那些写错位置的程序,但正确的写入值的位置是在64位部分。 - David HeffernanCurrentVersion\Run
列表的 32 位和 64 位版本都会被处理。因此,实际上你写入哪个版本并不重要。我假设 OP 想要写入这个键。但原则是相同的。 - David Heffernan