用delphi如何启动一个服务? 用delphi如何启动或者停止一个服务?我需要的是启动或者停止一个已经存在的服务,谢谢。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 uses winsvc; OpenService获得服务句柄hService 然后用ControlService来控制服务 SERVICE_CONTROL_PAUSE 暂停 SERVICE_CONTROL_STOP 停止 SERVICE_CONTROL_CONTINUE 另外还可以还可以用命令行的形式 winexec(pchar('cmd.exe /c net stop '+servicename),sw_hide); winexec(pchar('cmd.exe /c net start '+servicename),sw_hide); winexec(pchar('cmd.exe /c net pause '+servicename),sw_hide); 我是用在inno打包的,你的代码是无法编译的。 BAT的内容,不用我说了吧,在ISS档里加上[Run]Filename: {app}\Install.bat[UninstallRun]Filename: {app}\Uninstall.bat 忘记说,打包时,也要加上这两个bat档 我现在就是通过内置一个cmd脚本来实现的,可我在想,能不能用pascal代码来实现,我自己研究了好几天没有结果,所以来请教大家了。 私信里有,因为刚刚我连回三帖,不能再回第四帖,你看看私信吧,里面有方案还有另一个,你可以写个控制台程式,在INNO里调用来检测 启动停止服务函数,加上WinSvc单元编译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; 哥们,你的代码编译通不过呀。对了,我的服务名是 HZ_CommSrv,麻烦你帮我些完整代码吧。感激你啦。 完整的代码,编译通过,如果还有问题,我就要杀人了。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. 我是用在INNO SETUP打包工具中的,确实是不能编译。呵呵。这应该是编译器的问题,不是你的代码问题。你用过INNO吗?想让你修改一下,应用在INNO上面。成功的话,太感谢了。 在INNO中无法编译,不过还是感谢你的热心解答,分就给你了。 delphi 制作NT 服务出错 在调试时, 怎样动态设置下一条将要执行的语句? 打包 怎样使用DELPHI从ORACLE数据库中存取图片(JPG和BMP格式的) 很久没散过分了﹐散点分慰劳各位﹗ 请问如何在delphi中执行telnet进行远程登录?(急!在线等待!) 如何解决此类问题? vc有粘贴符,delphi里面有吗?急等!!! ADO更新数据库的问题。不解?????? Delphi 入门,Form.show; 与form.free; (急)DBGrid显示问题 如何提高canvas效率?
uses winsvc;
OpenService获得服务句柄hService
然后用ControlService来控制服务
SERVICE_CONTROL_PAUSE 暂停
SERVICE_CONTROL_STOP 停止
SERVICE_CONTROL_CONTINUE
另外还可以还可以用命令行的形式
winexec(pchar('cmd.exe /c net stop '+servicename),sw_hide);
winexec(pchar('cmd.exe /c net start '+servicename),sw_hide);
winexec(pchar('cmd.exe /c net pause '+servicename),sw_hide);
Filename: {app}\Install.bat[UninstallRun]
Filename: {app}\Uninstall.bat
我现在就是通过内置一个cmd脚本来实现的,
可我在想,能不能用pascal代码来实现,
我自己研究了好几天没有结果,所以来请教大家了。
{
启动服务
}
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;
对了,我的服务名是 HZ_CommSrv,
麻烦你帮我些完整代码吧。感激你啦。
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.
确实是不能编译。呵呵。这应该是编译器的问题,
不是你的代码问题。你用过INNO吗?
想让你修改一下,应用在INNO上面。
成功的话,太感谢了。