金笛工业手机论坛  

返回   金笛工业手机论坛 > 开发者乐园 > 短信开发资料

短信开发资料 短信开发技巧,代码分析

 
 
LinkBack 主题工具 显示模式
旧 2009-10-22   #1 (permalink)
高级会员
 
注册日期: 2009-07-09
住址: 亦庄经济开发区2号院大族广场1502
帖子: 535
susu8988 正向着好的方向发展
默认 delphi调用API来实启动/停止/卸载windows服务

建议参考一下Delphi的ScktSrvr原码, $(DELPHI)\Source\Vcl\ScktSrvr.dpr

--------------------------------------------------------------------------------
windows 系统服务
--------------------------------------------------------------------------------
function StartService(AServName: string): Boolean; //use WinSvc
var
SCManager, hService: SC_HANDLE;
lpServiceArgVectors: PChar;
begin
SCManager := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
Result := SCManager <> 0;
if Result then
try
hService := OpenService(SCManager, PChar(AServName), SERVICE_ALL_ACCESS);
Result := hService <> 0;
if (hService = 0) and (GetLastError = ERROR_SERVICE_DOES_NOT_EXIST) then
Exception.Create('The specified service does not exist');
if hService <> 0 then
try
lpServiceArgVectors := nil;
Result := WinSvc.StartService(hService, 0, PChar(lpServiceArgVectors));
if not Result and (GetLastError = ERROR_SERVICE_ALREADY_RUNNING) then
Result := True;
finally
CloseServiceHandle(hService);
end;
finally
CloseServiceHandle(SCManager);
end;
end;


function StopService(AServName: string): Boolean;
var
SCManager, hService: SC_HANDLE;
SvcStatus: TServiceStatus;
begin
SCManager := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
Result := SCManager <> 0;
if Result then
try
hService := OpenService(SCManager, PChar(AServName), SERVICE_ALL_ACCESS);
Result := hService <> 0;
if Result then
try //停止并卸载服务;
Result := ControlService(hService, SERVICE_CONTROL_STOP, SvcStatus);
//删除服务,这一句可以不要;
// DeleteService(hService);
finally
CloseServiceHandle(hService);
end;
finally
CloseServiceHandle(SCManager);
end;
end;


------------------------------------------------------------------------------------------------------
Others
------------------------------------------------------------------------------------------------------


uses
Winsvc,..,;

function RunServies(svr:String):Boolean;//启动某个服务;
var
schService:SC_HANDLE;
schSCManager:SC_HANDLE;
ssStatus:TServiceStatus;
Argv:PChar;
begin
schSCManager:=OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS);
schService:=OpenService(schSCManager,Pchar(svr),SERVICE_ALL_ACCESS);
result := True;
try
if StartService(schService,0,Argv) then
begin
while (QueryServiceStatus(schService,ssStatus)) do
begin
Sleep(500);
Application.ProcessMessages;
if ssStatus.dwCurrentState=SERVICE_START_PENDING then
Sleep(500)
else
Break;
end;//while
if ssStatus.dwCurrentState=SERVICE_RUNNING then
result := True
else
result := False;
end
else
result := False;
finally
CloseServiceHandle(schService);
CloseServiceHandle(schSCManager);
end;
end;
function StopServies(svr:String):Boolean;//停止某个服务;
var
schService:SC_HANDLE;
schSCManager:SC_HANDLE;
ssStatus:TServiceStatus;
begin
schSCManager:=OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS);
schService:=OpenService(schSCManager,Pchar(svr),SERVICE_ALL_ACCESS);
try
if ControlService(schService,SERVICE_CONTROL_STOP,ssStatus) then
begin
Sleep(1000);
while (QueryServiceStatus(schService,ssStatus)) do
begin
Application.ProcessMessages;
if ssStatus.dwCurrentState=SERVICE_STOP_PENDING then
Sleep(1000)
else
break;
end; //while
if ssStatus.dwCurrentState=SERVICE_STOPPED then
result := True
else
result := False;
end
else
result := False;
finally
CloseServiceHandle(schService);
CloseServiceHandle(schSCManager);
end;
end;

------------------------------------------------------------------------------------------------------
Others
------------------------------------------------------------------------------------------------------


unit Unit1;

interface

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

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
schService:SC_HANDLE;
schSCManager:SC_HANDLE;
ssStatus:TServiceStatus;
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
schSCManager:=OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS);
schService:=OpenService(schSCManager,'alerter',SERVICE_ALL_ACCESS);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
CloseServiceHandle(schService);
CloseServiceHandle(schSCManager);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
Argv:PChar;
begin
if StartService(schService,0,Argv) then
begin
form1.caption:='Start Service Now ';
Sleep(1000);
while (QueryServiceStatus(schService,ssStatus)) do
begin
Application.ProcessMessages;
if ssStatus.dwCurrentState=SERVICE_START_PENDING then
begin
form1.caption:=form1.caption+('.');
Sleep(1000);
end else break;
end;
if ssStatus.dwCurrentState=SERVICE_RUNNING then
form1.caption:='Service Start Ok'
else form1.caption:='Service Start Fail';
end
else form1.caption:='Service Start Fail';
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
if ControlService(schService,SERVICE_CONTROL_STOP,ssStatus) then
begin
form1.caption:='Stopping Service Now ';
Sleep(1000);
while (QueryServiceStatus(schService,ssStatus)) do
begin
Application.ProcessMessages;
if ssStatus.dwCurrentState=SERVICE_STOP_PENDING then
begin
form1.caption:=form1.caption+('.');
Sleep(1000);
end else break;
end;
if ssStatus.dwCurrentState=SERVICE_STOPPED then
form1.caption:='Service Stop Ok'
else form1.caption:='Service Stop Fail';
end
else form1.caption:='Service Stop Fail';
end;
end.
__________________
地址:北京亦庄经济技术开发区荣华南路10号院5号楼705

电话:010-82356575/76/77转6070 联系人:苏秋英

手机微信同号:13811870548 QQ: 1170923055
susu8988 当前在线   回复时引用此帖
 

书签


当前查看此主题的会员: 2 (0 位会员和 2 位游客)
 

发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码
Trackbacks are 启用
Pingbacks are 启用
Refbacks are 启用



所有时间均为北京时间。现在的时间是 01:15


Powered by vBulletin® 版本 3.8.3
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.