Question

J'essaie de créer une clé dans HKLM mais il crée sous HKLM Software Wow6432Node! Comme C ++ Builder 2010 produit de l'EXE 32 bits et il enregistre dans la section d'application 32
Exécution de Windows 7 x64

Comment utiliser le tregistry pour le faire en utilisant des drapeaux ou ....

en outre OpenKeyEx n'est pas là :(

Voici mon code

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;
}
Était-ce utile?

La solution

Vous essayez d'accéder à une clé de registre 64 bits à partir d'un processus 32 bits. Pour ce faire, vous devez inclure le KEY_WOW64_64KEY Flag Lors de l'ouverture de la clé, par exemple:

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

Ou:

reg->Access = KEY_WRITE | KEY_WOW64_64KEY;

À l'avenir, si vous passez à la mise à niveau vers XE2 ou version ultérieure, qui prend en charge le développement 64 bits, vous devez spécifier l'indicateur uniquement si IsWow64Process() Rapports que vous êtes un processus 32 bits exécuté sous WOW64, par exemple:

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

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

.

TRegistry *reg = new TRegistry(flags);

.

reg->Access = flags;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top