程序如下:
unit Unit1;interfaceuses
  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.我将这段代码放到普通应用程序里就可以正确读取到字符串,而在服务里就是读不出来,不知道为什么,百思不得其解啊,哪位帮帮忙吧,谢谢了。

解决方案 »

  1.   

    晕,看了看代码,原来你要showmessage,你把桌面交换设成true看看。
      

  2.   

    你说的我都试过了,交互肯定要设成true啊,另外我在start里也试过,没用的,问题不在这些地方
      

  3.   

    自己解决了。HKEY_CURRENT_USER里的项会映射到不同的用户,所以无法读取,放到其他根键里就可以了。但是具体HKEY_CURRENT_USER为什么在服务里读不出来呢?我想应该是因为windows服务在系统没有登录时便可以运行,可见它一定是运行在某个特殊的用户权限下,而HKEY_CURRENT_USER是登录后的用户,肯定不是前面的特殊用户,因此service去读一个不是自己权限内的HKEY_CURRENT_USER里的字符串时就读不出来,因为它自己权限里并没有那一项,所以读出来必定是空。
    不知我说的对不对,希望有人给我确认一下