在工作中我遇到了我们产品的一个奇怪行为,发现可以归结为 Windows API RegOpenKeyEx 的奇怪行为。下面是我的测试代码:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int main(int argc, char* argv[])
{
HKEY hk;
LONG lreturn = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
TEXT("Software\\Mercury Interactive\\LoadRunner\\Vugen\\Logger\\media"),
0,
KEY_READ,
&hk );
if(lreturn==ERROR_SUCCESS)
{
printf("YES!\n");
}
else
{
printf("NO!\n");
}
char a ;
scanf("%c ", &a);
return 0;
}
在我的本地机器上,上面的程序提示“是”,而在另一个远程虚拟机上运行时,它会输出“否”。
在两台机器上,注册表项“Software\Mercury Interactive\LoadRunner\Vugen\Logger\media”存在于 HKEY_CURRENT_USER 而不是 HKEY_LOCAL_MACHINE 下。
所以我很困惑为什么它在本地机器上输出“YES”?更奇怪的是,为什么它在两台机器上的行为不同?本地机器是Win7 64bit。远程虚拟机是Win7 32bit。该程序编译为 32 位。