gpt4 book ai didi

C# WOW6432 注册表节点搞砸了

转载 作者:可可西里 更新时间:2023-11-01 13:52:26 24 4
gpt4 key购买 nike

尝试执行写入注册表的简单任务,以使 C# 应用程序在启动时运行。

使用基本的 Win32.RegistryKey 设置,但出于某种原因,它一直将我的 key 添加到 /SOFTWARE/WOW6432/Microsoft/Windows.. 等目录中,而不是普通目录ol /SOFTWARE/Microsoft/Windows..

试着仔细阅读了一下,但似乎没有一个简单的答案来回答这个问题:如何专门将 key 写入 /SOFTWARE/Microsoft/Windows 注册表项而不是写入 WOW6432?我已经检查以确保我的 Visual C# Express 解决方案文件的平台列为 x86...所以它编译正确...我只是不想要那个 wow6432 目录。

感谢您的建议!

编辑:

我现在正在使用以下但仍然没有成功:

Microsoft.Win32.RegistryKey localKey32 = Microsoft.Win32.RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, Microsoft.Win32.RegistryView.Registry64);

最佳答案

您的进程以 x86 为目标(即它是一个 32 位进程),当在 WOW64 模拟器下的 64 位机器上运行时,registry redirection发挥作用。对于注册表的某些部分,系统维护两个不同的 View ,一个用于 32 位进程,一个用于 64 位进程。受重定向影响的键列表在这里:Registry Keys Affected by WOW64 .

重定向对应用程序是透明的。 32 位进程访问 HKLM\Software 并且不知道(实际上不需要知道)64 位操作系统实际上正在访问 HKLM\Software\Wow6432Node

您有多种选择:

  1. 切换到 AnyCPU 目标,这样您的进程将以 32 位或 64 位运行,具体取决于底层操作系统。这在 Express 版本中很难实现,因为无法从 IDE 指定目标平台。
  2. 明确打开注册表的 64 位 View 。在 .net 中,这需要 RegistryView枚举。但是,请注意,此功能需要 .net 4,对于早期版本的 .net,需要 p/invoke 才能打开注册 TableView 。
  3. 继续以 x86 为目标并写入 HKLM\Software。 64 位系统在处理启动时运行注册表项时将读取注册表的两个 View 。换句话说,您现有的方法已经奏效了!

作为最后一点,我认为设置此注册表项的任务最好留给安装程序。修改 HKLM\Software 下的 key 需要管理员权限,通常您只能期望在安装时拥有管理员权限。

关于C# WOW6432 注册表节点搞砸了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8959983/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com