我正在尝试在HKLM中创建一个键,但它在HKLM \ SOFTWARE \ Wow6432Node下创建!
因为C ++ builder 2010生成32位exe并且它节省了32个应用程序部分
运行Windows 7 x64
如何使用TRegistry来使用flags或....
另外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;
}
答案 0 :(得分:4)
您正尝试从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;