문제

HKLM에서 키를 생성하려고 하는데 HKLM\SOFTWARE\Wow6432Node 아래에 생성됩니다!C++ 빌더 2010은 32비트 exe를 생성하고 32개의 앱 섹션에 저장되므로
Windows 7 x64 실행 중

플래그를 사용하여 TRegistry를 사용하는 방법 또는....

게다가 OpenKeyEx 거기 없어요 :(

여기 내 코드가 있습니다

TRegistry * reg=new TRegistry(KEY_WRITE);
try 
{
  reg->RootKey=HKEY_LOCAL_MACHINE;
  if (!reg->OpenKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon\\SpecialAccounts\\UserList",0)) 
  {
    //reg->CreateKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon\\SpecialAccounts\\UserList");
  }
  //reg->Access=KEY_WRITE;
  bool ores=reg->OpenKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon\\SpecialAccounts\\UserList",true);
  reg->WriteString("ouser","0");
  reg->CloseKey();
} 
catch (...) 
{
  delete reg;
}
도움이 되었습니까?

해결책

32비트 프로세스에서 64비트 레지스트리 키에 액세스하려고 합니다.그렇게 하려면 다음을 포함해야 합니다. KEY_WOW64_64KEY 키를 열 때 플래그를 지정합니다. 예:

TRegistry *reg = new TRegistry(KEY_WRITE | KEY_WOW64_64KEY);

또는:

reg->Access = KEY_WRITE | KEY_WOW64_64KEY;

앞으로 64비트 개발을 지원하는 XE2 이상으로 업그레이드하는 경우 다음 경우에만 플래그를 지정해야 합니다. IsWow64Process() WOW64에서 실행되는 32비트 프로세스라고 보고합니다. 예:

BOOL bIsWow64 = FALSE;
IsWow64Process(GetCurrentProcess(), &bIsWow64);

long flags = KEY_WRITE;
if (bIsWow64) flags |= KEY_WOW64_64KEY;

.

TRegistry *reg = new TRegistry(flags);

.

reg->Access = flags;
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top