转一个函数,据说可以取得注册表的权限,我没试过…… ^_^ ---------------- function AllowRegKeyForEveryone(Key: HKEY; Path: string): Boolean; var WidePath: PWideChar; Len: Integer; begin case Key of HKEY_LOCAL_MACHINE: Path := 'MACHINE\' + Path; HKEY_CURRENT_USER: Path := 'CURRENT_USER\' + Path; HKEY_CLASSES_ROOT: Path := 'CLASSES_ROOT\' + Path; HKEY_USERS: Path := 'USERS\' + Path; end; Len := (Length(Path)+1)*SizeOf(WideChar); GetMem(WidePath,Len); MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, PChar(Path), -1, WidePath, Len); Result := SetNamedSecurityInfoW(WidePath, SE_REGISTRY_KEY, DACL_SECURITY_INFORMATION, nil, nil, nil, nil) = ERROR_SUCCESS; FreeMem(WidePath); end;
没在一直打开,只是一次创建,并赋值,然后关闭的过程... var lpData:dword; hk:HKEY; begin lpData:=1; if RegCreateKey(HKEY_CURRENT_USER,'aa',hk)<>0 then MessageBox(0,'Create','',MB_DEFAULT_DESKTOP_ONLY); if RegSetValueEx(hk,'aa',0,REG_DWORD,@lpData,4)<>0 then MessageBox(0,'SetValue','',MB_DEFAULT_DESKTOP_ONLY); RegCloseKey(hk); end; 错误提示也没有... 但如果把代码写在程序开始处,不是写在服务代码中,就能成功创建... 所以怀疑是不是服务中不能读写注册表,或有其它变通的方法. 感谢指教. 感谢 Kevin_Lmx(繁华阅尽) 的代码,我试一下.
^_^
----------------
function AllowRegKeyForEveryone(Key: HKEY; Path: string): Boolean;
var
WidePath: PWideChar;
Len: Integer;
begin
case Key of
HKEY_LOCAL_MACHINE:
Path := 'MACHINE\' + Path;
HKEY_CURRENT_USER:
Path := 'CURRENT_USER\' + Path;
HKEY_CLASSES_ROOT:
Path := 'CLASSES_ROOT\' + Path;
HKEY_USERS:
Path := 'USERS\' + Path;
end;
Len := (Length(Path)+1)*SizeOf(WideChar);
GetMem(WidePath,Len);
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, PChar(Path), -1, WidePath, Len);
Result := SetNamedSecurityInfoW(WidePath, SE_REGISTRY_KEY,
DACL_SECURITY_INFORMATION, nil, nil, nil, nil) = ERROR_SUCCESS;
FreeMem(WidePath);
end;
var
lpData:dword;
hk:HKEY;
begin
lpData:=1;
if RegCreateKey(HKEY_CURRENT_USER,'aa',hk)<>0 then
MessageBox(0,'Create','',MB_DEFAULT_DESKTOP_ONLY);
if RegSetValueEx(hk,'aa',0,REG_DWORD,@lpData,4)<>0 then
MessageBox(0,'SetValue','',MB_DEFAULT_DESKTOP_ONLY);
RegCloseKey(hk);
end;
错误提示也没有...
但如果把代码写在程序开始处,不是写在服务代码中,就能成功创建... 所以怀疑是不是服务中不能读写注册表,或有其它变通的方法. 感谢指教.
感谢 Kevin_Lmx(繁华阅尽) 的代码,我试一下.
HKEY_LOCAL_MACHINE下的。
HKEY_CURRENT_MACHINE 這個來保存你的東西,
可將調試信息寫到 log 文件, 或 設置 Service 的 Interactive 為true, 來顯示當前的MessageBox信息
感谢回答
我是Adminitrator用户登录的,HKEY_LOCAL_MACHINE下面的操作没试,但我想也应该差不多,因为注册表的API函数返回结果是正确的,但就是不能读取数据.
Service的Interactive是设置了的,也用了MessageBox来确定API的返回是否正确... 但一切似乎都很正常. 再看注册表数据的时候,却一无所有.