0

为了安全起见,我曾经添加registry key过我的。windows application在 XP 操作系统中运行良好但是当我在Windows 7 OS 系统(64 位)上安装我的应用程序时,4-5 天后我的应用程序在HKEY_LOCAL_MACHINE\SOFTWARE.

我的应用程序再次要求在系统中添加注册表项。我不知道如何HKEY_LOCAL_MACHINE\SOFTWARE在 Windows 7 OS 64 位中删除或删除我的软件的 reg 密钥。

要在 C#.Net App 中添加 reg 键,我使用了以下代码:

// Create an instance of HKEY_LOCAL_MACHINE registry key
RegistryKey parentKey = Registry.LocalMachine;
// Open the SOFTWARE registry sub key under the HKEY_LOCAL_MACHINE parent key
  RegistryKey softwareKey = parentKey.OpenSubKey("SOFTWARE", true);
  // Create a DaveOnC# registry sub key under the SOFTWARE key
  RegistryKey subKey = softwareKey.CreateSubKey("MySoftWareRegKey");
  subKey.SetValue("Name", encryptedMac, RegistryValueKind.String);

     subKey.Close();
     softwareKey.Close();
     parentKey.Close();

我想再次提一下no error has been generated in application at running time,但是在 Windows 7 64 位系统中的位置几天(可能是 4-5 天)my application couldn't find reg key后,我不得不再次添加它以执行我的应用程序。

所以直接我的问题是如何在 Windows 7 操作系统中永久添加 Reg Key HKEY_LOCAL_MACHINE\SOFTWARE

任何建议或答案都非常感谢。提前致谢!!!

4

1 回答 1

1

我怀疑这与注册表虚拟化有关。您的 32 位交互式进程(注册表虚拟化不适用于服务或 64 位进程)可能没有权限在 Windows 7 上创建此注册表设置,因此系统将其转移到每个用户设置中,如中所述那个链接。如该链接中所述,您可以使用带有 FLAGS 选项的 Reg.exe 命令行实用程序来查询任何注册表项的虚拟化标志的状态。

我不确定为什么它会在一段时间后消失 - 也许它正在检查不同的用户或应用了不同的虚拟化策略?但真正的解决方法是在可行的情况下以管理员权限运行程序,以便正确编写密钥。

编辑:针对您的评论,HKEY_LOCAL_MACHINE\Software\Wow6432Node是 HKEY_LOCAL_MACHINE\Software 的 32 位等效项(尽管 32 位应用程序不知道此重定向)。所以这是 32 位程序的正常行为。您使用什么工具来检查注册表项 - 我怀疑它没有显示重定向?

于 2012-10-26T16:44:44.433 回答