0

Windows7和Win64是我的新平台,编程明智,所以不知道发生了什么,我使用以下命令在windows7 64位的Windows注册表中保存了一个键,问题是相同的代码能够返回REG_OPENED_EXISTING_KEY返回值,这意味着密钥创建成功并且该函数能够在后续调用中读取/打开密钥,但是当我尝试在 regedit.exe 的位置中找到密钥时,我不能它根本没有显示在树既不在 HKLM_LOCAL_MACHINE/Software/MyProject 也不在 HKLM_LOCAL_MACHINE/Software/Wow6432Node/MyProject

有人可以澄清这里发生了什么吗?

 HKEY hKey ;
 HKEY  key = HKEY_LOCAL_MACHINE;
 DWORD disValue ;
 string subKey = "Software\\MyProject\\";

 LONG retValue = RegCreateKeyEx( key, subKey.c_str(), 0, 0, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, 0, &hKey, &disValue ) ;
 if ( retValue == ERROR_SUCCESS )
 {
    if ( disValue == REG_CREATED_NEW_KEY )// new key created. This value will change to REG_OPENED_EXISTING_KEY if the key already existed, the function then simply open the key.
       return true;
    return false;
 }
4

2 回答 2

1

如果您的进程没有以管理员身份运行,它将无法访问HKLM\SOFTWARE. 出于兼容性原因,Windows Vista 和 Windows 7 将应用称为“注册表虚拟化”的东西。这会将对 HKLM\SOFTWARE 的访问重定向到您的进程可以访问的位置。它对尝试写入C:\Program Files.

Windows 如何确定您的应用程序是“旧版”并需要此兼容性破解?你需要一个应用程序清单来告诉 Windows 你的进程是 Windows Vista 感知的并且你不想被黑客入侵。

于 2012-11-27T14:04:28.017 回答
0

我将以下清单文件添加到项目中,并将CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "MyProject.exe.Manifest"添加到 resource.rc 文件中。瞧。

**MyProject.exe.Manifest**

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly
  xmlns="urn:schemas-microsoft-com:asm.v1"
  manifestVersion="1.0">

<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> 
    <application> 
      <!--This Id value indicates the application supports Windows Vista functionality -->
    <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/> 
      <!--This Id value indicates the application supports Windows 7 functionality-->
    <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
    </application> 
</compatibility>

<assemblyIdentity
    name="MyCompany.Apps.MyProject"
    processorArchitecture="*"
    version="1.0.0.0"
    type="win32"/>
<description>App description</description>
<dependency>
    <dependentAssembly>
    <assemblyIdentity
        type="win32"
        name="Microsoft.Windows.Common-Controls"
        version="6.0.0.0"
        processorArchitecture="*"
        publicKeyToken="6595b64144ccf1df"
        language="*"
    />
    </dependentAssembly>
</dependency>

<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
    <requestedPrivileges>
        <requestedExecutionLevel
        level="requireAdministrator"
        uiAccess="false"/>
    </requestedPrivileges>
</security>
</trustInfo>
</assembly>
于 2012-11-27T15:53:37.683 回答