本帖最后由 smooth188 于 2010-03-19 13:00:46 编辑

解决方案 »

  1.   

    如果是DELPHI写的服务,可以用[程序完成路径名 -install]来注册,用[程序完成路径名 -uninstall]来卸载服务。
      

  2.   

    我现在需要的是启动或者停止一个已经存在的服务,
    用delphi来如何写语句呢?
      

  3.   


    function ServiceStart(const ServiceName: string; const Computer: PChar = nil): Boolean;
    {
      启动服务
    }
    var
      SCM, SCH: SC_Handle;
      P: PChar;
    begin
      Result := False;
      if IsLocalComputer(Computer) then
        SCM := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS)
      else
        SCM := OpenSCManager(Computer, nil, SC_MANAGER_ALL_ACCESS);
      if SCM <> 0 then
      begin
        SCH := OpenService(SCM, PChar(ServiceName), SERVICE_ALL_ACCESS);
        if SCH <> 0 then
        begin
          Result := StartService(SCH, 0, P);
          CloseServiceHandle(SCH);
        end;
        CloseServiceHandle(SCM);
      end;
    end;function ServiceStop(const ServiceName: string; const Computer: PChar = nil): Boolean;
    {
      停止服务
    }
    var
      SCM, SCH: SC_Handle;
      ServiceStatus: TServiceStatus;
    begin
      Result := False;
      if IsLocalComputer(Computer) then
        SCM := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS)
      else
        SCM := OpenSCManager(Computer, nil, SC_MANAGER_ALL_ACCESS);
      if SCM <> 0 then
      begin
        SCH := OpenService(SCM, PChar(ServiceName), SERVICE_ALL_ACCESS);
        if SCH <> 0 then
        begin
          Result := ControlService(SCH, SERVICE_CONTROL_STOP, ServiceStatus);
          CloseServiceHandle(SCH);
        end;
        CloseServiceHandle(SCM);
      end;
    end;
      

  4.   


    试了,不能编译,变量类型SC_Handle无法识别。
      

  5.   

    忘记说了,我的服务名是HZ_CommSrv
    要是能编译,太感谢你啦。
      

  6.   

    编译通过的代码,非逼着我试验:unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, WinSvc, StdCtrls;type
      TForm1 = class(TForm)
        btnStart: TButton;
        procedure btnStartClick(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}function ServiceStart(const ServiceName: string; const Computer: PChar = nil): Boolean;
    {
      启动服务
    }
    var
      SCM, SCH: SC_Handle;
      P: PChar;
    begin
      Result := False;
      SCM := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
      if SCM <> 0 then
      begin
        SCH := OpenService(SCM, PChar(ServiceName), SERVICE_ALL_ACCESS);
        if SCH <> 0 then
        begin
          Result := StartService(SCH, 0, P);
          CloseServiceHandle(SCH);
        end;
        CloseServiceHandle(SCM);
      end;
    end;function ServiceStop(const ServiceName: string; const Computer: PChar = nil): Boolean;
    {
      停止服务
    }
    var
      SCM, SCH: SC_Handle;
      ServiceStatus: TServiceStatus;
    begin
      Result := False;
      SCM := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
      if SCM <> 0 then
      begin
        SCH := OpenService(SCM, PChar(ServiceName), SERVICE_ALL_ACCESS);
        if SCH <> 0 then
        begin
          Result := ControlService(SCH, SERVICE_CONTROL_STOP, ServiceStatus);
          CloseServiceHandle(SCH);
        end;
        CloseServiceHandle(SCM);
      end;
    end;procedure TForm1.btnStartClick(Sender: TObject);
    begin
      ServiceStart('HZ_CommSrv');
    end;end.
      

  7.   

    你用的是什么编译器呢?我用的是INNO打包的编译器。
    可能是因为编译器的原因吧。
      

  8.   

    呵呵。乖不得啦。
    不知道如何才能在INNO 中应用。。