求用delphi(pascal)脚本写一个用于程序安装时向系统写入一个服务的代码 本帖最后由 smooth188 于 2010-03-19 13:00:46 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果是DELPHI写的服务,可以用[程序完成路径名 -install]来注册,用[程序完成路径名 -uninstall]来卸载服务。 我现在需要的是启动或者停止一个已经存在的服务,用delphi来如何写语句呢? 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; 试了,不能编译,变量类型SC_Handle无法识别。 忘记说了,我的服务名是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打包的编译器。可能是因为编译器的原因吧。 呵呵。乖不得啦。不知道如何才能在INNO 中应用。。 高难度的fastreport报表,请高手指教 求 ExtraPack 源码. TTimer and TImage Work together 求教,做图像的网络传输,用indy的idtcpserver方便还是tcpserver方便?请给出理由。 怎样将制作软件演示? 关于动态创建计算字段!200分进者有分 如何在delphi程序中禁止某个端口的使用 我在一个进程A中调用另一个进程B,我想等B执行完后再执行A,怎么做? 調用外部程式或命令. l_jia()近来领分5 定义参数为空 但报错了 delphi中如何用另加的ScrollBar取代DBGrid中的水平ScrollBar?
用delphi来如何写语句呢?
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;
试了,不能编译,变量类型SC_Handle无法识别。
要是能编译,太感谢你啦。
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 中应用。。