DELPHI中如何启动和停止NT服务?

daydreamer77 2002-05-30 10:50:22
我自己写了一个NT上运行的服务,也成功安装测试了。但我需要写一个界面来控制这个服务,请问怎样写一个应用程序与服务通信呢?例如把它设置成“自动”或“手动”,启动和关闭服务这些功能怎样实现?
...全文
31 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
debussy 2002-05-30
  • 打赏
  • 举报
回复
http://www.delphi-jedi.org
水之手 2002-05-30
  • 打赏
  • 举报
回复
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
Function StartServices(Const svrName:String):Boolean;
Function StopServices(Const svrName:String):Boolean;
implementation
Uses Winsvc;
{$R *.dfm}
Function StartServices(Const svrName:String):Boolean;
var
a,b: SC_HANDLE;
c: PChar;
begin
StartServices:=False;
a:=OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);//ok is a>0
if a<=0 then exit;
b:=OpenService(a,PChar(svrName), SERVICE_ALL_ACCESS);//ok is b>0
if b<=0 then exit;
//开启服务
StartServices:=StartService(b, 0, c);
End;
Function StopServices(Const svrName:String):Boolean;
var
a, b: SC_HANDLE;
c: PChar;
d: TServiceStatus;
begin
StopServices:=False;
a := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);//ok is a>0
if a<=0 then exit;
b := OpenService(a,PChar(svrName), SERVICE_ALL_ACCESS);//ok is b>0
if b<=0 then exit;
StopServices:=ControlService(b, SERVICE_CONTROL_STOP, d);
End;

procedure TForm1.Button1Click(Sender: TObject);
begin
if StartServices(Edit1.Text) then ShowMessage('启动成功');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
if StopServices(edit1.Text) then ShowMessage('失败');
end;

end.
debussy 2002-05-30
  • 打赏
  • 举报
回复
Jedi Project的新版本JCL里面有关于NT服务的单元。

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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