大数据量注册表操作
大数据量注册表操作
TZ们,我遇到了一个非常非常非常非常棘手的问题,就是想往注册表里面导入30MB+的数据,用.reg、reg.exe、RegSetValue都不行,谁能帮帮我啊?不知道用什么函数才行。
代码:
- C/C++ code
#include <Windows.h>#include <iostream>using namespace std;int main(void){ const char* SubKeyName = "Software\\Thunisoft\\Unispim\\6.6"; const char* ValueName = "Config"; char TempValue[39488]; //39488是文件大小 FILE* File; HKEY hKey; long t; DWORD dw; if( (File=fopen("REGDAT.DAT","rb"))==NULL) //REGDAT.DAT是数据文件 { cout << "Error: OpenFile" << endl; return -1; } if( (t=fread((void*)&TempValue,1,39488,File))!=39488) { cout << "Error: ReadFile" << endl; cout << "Returned: " << t << endl; fclose(File); return -1; } fclose(File); if( RegCreateKeyEx(HKEY_CURRENT_USER, SubKeyName, 0, REG_NONE, REG_OPTION_NON_VOLATILE, KEY_WRITE|KEY_READ, NULL, &hKey, &dw)!=ERROR_SUCCESS ) { cout << "Error: CreateKey" << endl; return -1; } RegCloseKey( hKey ); if( RegOpenKeyEx(HKEY_CURRENT_USER, SubKeyName, 0, KEY_QUERY_VALUE|KEY_SET_VALUE, &hKey)!=ERROR_SUCCESS ) { cout << "Error: OpenKey" << endl; return -1; } if( RegSetValueEx(hKey, ValueName, 0, REG_BINARY,(const BYTE*)TempValue , 39489) != ERROR_SUCCESS ) { cout << "Error: RegSetValueEX" << endl; RegCloseKey( hKey ); return -1; } RegCloseKey( hKey ); cout << "Succeeded!" << endl; system("pause>nul"); return 0;}PS:谁有有关输入法一块的API资料,发一份。
PS2:WinSock资料……同上
PS3:我的邮箱
[解决办法]
为什么要这么做啊?
[解决办法]
出现的什么错误?up
[解决办法]
[解决办法]
[解决办法]
意图不明..
[解决办法]
注册表是个非常糟糕的设计,把大量数据存储进注册表,是脑残行为
[解决办法]
[解决办法]
[解决办法]
不知道你的工作是不是有这种必要
但可以通过编写一个直接操作HIVE文件的接口来实现大规模的注册表修改。
或者看看紫光输入法怎么做的
[解决办法]
注册表编辑器并不可靠,它不是所有的值都能看到
你可以自己query下看有没有成功
[解决办法]
不知道楼主的问题解决了没有,其实注册表放30M+的东西完全没有问题。当然要用点小技巧了,可以把文件分割后保存在注册表的不同键名下,并且记录文件分割的序号,以便今后将注册表中分割的文件完整地还原。
[解决办法]
先生成一个c:\\30M.reg文件
然后
system("regedit.exe /s c:\\30M.reg");
_unlink("c:\\30M.reg");