2

仕事中に、私たちの製品の奇妙な動作に遭遇しました。これは、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 ビットとしてコンパイルされます。

4

3 に答える 3

2

これはRegistry Virtualizationに少し似ています。ローカル マシンの VirtualStore にエントリがある場合 (以前の開発中の Create 呼び出し?)、キーが HKLM の下に存在しなくても open 呼び出しは成功します。

この問題を解決するには、 Process Monitorを実行します...

于 2012-06-06T13:59:06.467 に答える
0

キーがリモートマシンに存在しないか、アクセス権がない可能性があります。

ドキュメントとそれが返すエラーコードを確認してください。

于 2012-06-06T13:53:30.127 に答える
0

関数を使用してFormatMessage( ... )、より意味のあるエラーの説明を表示します。

于 2012-06-06T14:21:23.347 に答える