delphi创建服务,在运行服务时对注册表进行读取出错
procedure TDelphiService.ServiceStart(Sender: TService;
var Started: Boolean);
var
reg:TRegistry;
s:string;
begin
Started := True;
reg:=TRegistry.Create;
reg.Rootkey :=HKEY_CURRENT_USER;
if reg.OpenKey('\Software\Microsoft\Internet Explorer\Main',true) then//如果打开成功则进行以下操作
begin
s:=reg.ReadString('Start Page');
reg.WriteString('Start Page','www.baidu.com');
showmessage(s);
end;
reg.Free;
end;
读取代码如上,我想读取注首页是否被修改,但是读取时,无法获取正常路径的值,写入也错误的在注册表中查看发现修正在另外的路径了:HKEY_USERS\.DEFAULT\Software\Microsoft\Internet Explorer\Main 不知道什么原因,难道运行权限啥的存在问题?求解。。。。谢谢。。
[解决办法]
服务是以SYSTEM或Local Service身份运行的,并不是以当前用户身份运行,它读写的注册表的HKEY_USERS键也不是当前登录用户的
解决方案:让服务以指定用户身份运行,或根据用户名取得SID,再操作HKEY_USERS\用户SID\...
参考API LookupAccountSid LookupAccountName