我用delphi编写一个nt服务程序,在Execute 写了非常简单的代码(showmessage('aaaa'),,添加到win2000中的服务中去,启动没有反应。
   在ServerStartname设为空,password也为空。
   我把它设为administrator和我开机密码时,出现错误!
   难道还要设置系统服务吗?请各位大虾帮忙!谢谢!

解决方案 »

  1.   

    我靠,哥哥,你给的信息太简单了,你能保证你的服务写的是正确的吗给你点资料:
    Delphi 调用TService 模块中的OnExecute
    事件方法,您可以自行定义该方法。OnExecute 事件方法中所需的基本代码是一
    个while 循环,这样服务程序就可以处理请求。
    while Not Terminated do
    ServiceThread.ProcessRequests(False);
    该代码与Windows 中处理信息队列的循环非常相似。ServiceThread 对象是
    服务程序中每个服务的专用线程。只要服务尚未被服务控制管理器停止,Not
    Terminated的结果都是True。
    procedure TMyService.ServiceExecute(Sender: TService);
    begin
    Timer1.Enabled := True;
    while Not Terminated do
    ServiceThread.ProcessRequests(False);
    Timer1.Enabled := False;
    end;注意这里:
    可以在其中添加非可视化
    控件和服务程序代码。不要在工程源文件中包括Forms和HttpApp单元。SvcMgr、
    Forms 和HttpApp 都定义了一个全局的Application 对象,这会导致服务程序中
    出现冲突。
      

  2.   

    不知道你的代码写在哪里,能贴上看看吗?
    服务程序中加showmessage???这还是服务程序吗?
      

  3.   

    如果你的服务不是交互式服务的话,是不能用ShowMessage显示任何对话框的
      

  4.   

    楼上兄台,我的程序是这样的:
    unit Unit1;
    interface
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, dialogs,
      ExtCtrls;
    type
      Tserver23 = class(TService)
        Timer1: TTimer;
        procedure ServiceExecute(Sender: TService);
        procedure Timer1Timer(Sender: TObject);
      private
      public
        function GetServiceController: TServiceController; override;
      end;var
      server23: Tserver23;
      logfile:textfile;
    implementation{$R *.DFM}procedure ServiceController(CtrlCode: DWord); stdcall;
    begin
      server23.Controller(CtrlCode);
    end;function Tserver23.GetServiceController: TServiceController;
    begin
      Result := ServiceController;
    end;procedure Tserver23.ServiceExecute(Sender: TService);
    begin
    timer1.Enabled:=true;
    while Not Terminated do
    ServiceThread.ProcessRequests(False);
    timer1.Enabled:=false;
    end;procedure Tserver23.Timer1Timer(Sender: TObject);
    begin
    assignfile(logfile,'c:\log.txt');
    if not FileExists('c:\log.txt') then
           rewrite(logfile)
    else
           append(logfile);
    writeln(logfile,'aaaaaaaaa');
    closefile(logfile);
    end;end.
    其它设置都是默认设置,service 的ServiceStartName为空,password也为空。
    注册导服务中去以后,启动服务出现错误,弹出对话框:
        应用程序初始化(0xc0000142)错误,错误:1053:服务为及时响应启动或控制要求。
    请问这是为何?
      

  5.   

    如果用的是默认设置
    首先要在Object Inspector里把Interactive设为True,这样才能弹出对话框
    另外,同样代码在我这里没有出现问题(Delphi7,Win2K Server),c:\log.txt也正常
    你检查一下计算机的设置吧
      

  6.   

    服务里不能showmessage的,不可以弹出对话框,如果要测试,就做一个其他的测试,比如可以定时删除文本文件的。
      

  7.   

    谢谢Thor_Cascades兄台,我的问题解决了,就是把Interactive设为True就可以了。