仕事中に、私たちの製品の奇妙な動作に遭遇しました。これは、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;
}
私のローカル マシンでは、上記のプログラムを実行すると「YES」と表示されますが、別のリモート仮想マシンで実行すると「NO」と出力されます。
両方のマシンで、レジストリ キー「Software\Mercury Interactive\LoadRunner\Vugen\Logger\media」は、HKEY_LOCAL_MACHINE ではなく HKEY_CURRENT_USER の下に存在します。
それで、なぜローカルマシンで「YES」を出力するのか困惑していますか?さらに奇妙なことに、2 つのマシンで動作が異なるのはなぜですか? ローカル マシンは Win7 64 ビットです。リモート仮想マシンは Win7 32 ビットです。プログラムは 32 ビットとしてコンパイルされます。