怎么解决把一个正常的EXE程序注册成系统服务后能正常启动,我现在注册成功后启动出现1053错误。有没有什么好办法,我需要程序中出现窗体,对话框等。

解决方案 »

  1.   

    服务程序初始化时要调用StartServiceCtrlDispatcher,告诉系统该程序的每个服务名称及ServiceMain入口地址,在ServiceMain中调用ResisterServiceCtrlHandlerEx注册回调函数,回调函数中响应各种事件。
      

  2.   

    前提是你的EXE要是一个服务工程。而不是普通的exe软件。
      

  3.   

    你不能创建Application,而是用Service
      

  4.   

    我创建了一个标准的SERVICE程序,但是我如何让它交互,因为我需要程序里含有窗体信息,但是在服务启动后,窗体显示不出来!interactive已设置成TRUE
      

  5.   

    你要明白 EXE相对的桌面和 SYETEM 服务相对的桌面不是同一个
    另外服务跟操作系统也有很大关系的 
      

  6.   

    日志空的,里面并没有记录!
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs, Unit2;type
      TSysLock = class(TService)
        procedure ServiceStart(Sender: TService; var Started: Boolean);
        procedure ServiceStop(Sender: TService; var Stopped: Boolean);
        procedure ServicePause(Sender: TService; var Paused: Boolean);
        procedure ServiceShutdown(Sender: TService);
        procedure ServiceExecute(Sender: TService);
        procedure ServiceContinue(Sender: TService; var Continued: Boolean);
        procedure ServiceCreate(Sender: TObject);
      private
        { Private declarations }
      public
        function GetServiceController: TServiceController; override;
        { Public declarations }
      end;var
      SysLock: TSysLock;
      Frmlock: TFrmLock;
    implementation{$R *.DFM}procedure ServiceController(CtrlCode: DWord); stdcall;
    begin
      SysLock.Controller(CtrlCode);
    end;function TSysLock.GetServiceController: TServiceController;
    begin
      Result := ServiceController;
    end;procedure TSysLock.ServiceStart(Sender: TService; var Started: Boolean);
    begin
       Started := True;
       SvcMgr.Application.CreateForm(TFrmLock,FrmLock);
       //Frmlock.Hide;
    end;procedure TSysLock.ServiceStop(Sender: TService; var Stopped: Boolean);
    begin
       Stopped := True;
       FrmLock.Free;
    end;procedure TSysLock.ServicePause(Sender: TService; var Paused: Boolean);
    begin
       Paused := True;
    end;procedure TSysLock.ServiceShutdown(Sender: TService);
    begin
       FrmLock.Free;
       Status := csStopped;
       ReportStatus();
    end;procedure TSysLock.ServiceExecute(Sender: TService);
    begin
    while not Terminated do
    begin
    Sleep(10);
    ServiceThread.ProcessRequests(False);
    end;end;procedure TSysLock.ServiceContinue(Sender: TService;
      var Continued: Boolean);
    begin
    while not Terminated do
    begin
    Sleep(10);
    ServiceThread.ProcessRequests(False);
    end;
    end;procedure TSysLock.ServiceCreate(Sender: TObject);
    beginend;end.