为什么我在service里无法读取注册表里的字符串啊?

gbhsky 2010-05-13 08:31:05
程序如下:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Registry, Classes, Graphics, Controls, SvcMgr, Dialogs;

type
Thh = class(TService)
procedure ServiceExecute(Sender: TService);
private
{ Private declarations }
public
function GetServiceController: TServiceController; override;
{ Public declarations }
end;

var
hh: Thh;

implementation

{$R *.DFM}

procedure ServiceController(CtrlCode: DWord); stdcall;
begin
hh.Controller(CtrlCode);
end;

function Thh.GetServiceController: TServiceController;
begin
Result := ServiceController;
end;

procedure Thh.ServiceExecute(Sender: TService);
var reg : TRegistry;
begin
reg := TRegistry.Create;
reg.RootKey := HKEY_CURRENT_USER;
if reg.OpenKey('\Software\Kjtj',false) then
begin
ShowMessage(reg.ReadString('kjiefs'));
reg.CloseKey;
end;
reg.Free;
end;

end.

我将这段代码放到普通应用程序里就可以正确读取到字符串,而在服务里就是读不出来,不知道为什么,百思不得其解啊,哪位帮帮忙吧,谢谢了。
...全文
84 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
gbhsky 2010-05-13
  • 打赏
  • 举报
回复
自己解决了。HKEY_CURRENT_USER里的项会映射到不同的用户,所以无法读取,放到其他根键里就可以了。但是具体HKEY_CURRENT_USER为什么在服务里读不出来呢?我想应该是因为windows服务在系统没有登录时便可以运行,可见它一定是运行在某个特殊的用户权限下,而HKEY_CURRENT_USER是登录后的用户,肯定不是前面的特殊用户,因此service去读一个不是自己权限内的HKEY_CURRENT_USER里的字符串时就读不出来,因为它自己权限里并没有那一项,所以读出来必定是空。
不知我说的对不对,希望有人给我确认一下
gbhsky 2010-05-13
  • 打赏
  • 举报
回复
到底service有什么特别之处啊
gbhsky 2010-05-13
  • 打赏
  • 举报
回复
你说的我都试过了,交互肯定要设成true啊,另外我在start里也试过,没用的,问题不在这些地方
dinoalex 2010-05-13
  • 打赏
  • 举报
回复
晕,看了看代码,原来你要showmessage,你把桌面交换设成true看看。
dinoalex 2010-05-13
  • 打赏
  • 举报
回复
放到start看看。

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧