Uses WinSvc
procedure RunService(ServiceName : String); //启动服务
procedure TASESWatch2002.RunService(ServiceName: String);
var
svcmgr,svc : Integer ;
temp : _SERVICE_STATUS;
s : Pchar ;begin
svcmgr :=OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS);
if svcmgr = 0 then
exit ;
svc :=OpenService(svcmgr,pchar(ServiceName),SERVICE_ALL_ACCESS);
if svc = 0 then
begin
CloseServiceHandle(svcmgr);
exit ;
end ;
QueryServiceStatus(svc,temp);
if temp.dwCurrentState = SERVICE_STOPPED then
begin
if StartService(svc,0,s) then
//服务:"'+ServiceName+'"启动成功' else
//服务:"'+ServiceName+'"启动失败';
end ;// ControlService(svc,SERVICE_CONTROL_STOP,temp);关闭服务
CloseServiceHandle(svcmgr);
CloseServiceHandle(svc);
end;
procedure RunService(ServiceName : String); //启动服务
procedure TASESWatch2002.RunService(ServiceName: String);
var
svcmgr,svc : Integer ;
temp : _SERVICE_STATUS;
s : Pchar ;begin
svcmgr :=OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS);
if svcmgr = 0 then
exit ;
svc :=OpenService(svcmgr,pchar(ServiceName),SERVICE_ALL_ACCESS);
if svc = 0 then
begin
CloseServiceHandle(svcmgr);
exit ;
end ;
QueryServiceStatus(svc,temp);
if temp.dwCurrentState = SERVICE_STOPPED then
begin
if StartService(svc,0,s) then
//服务:"'+ServiceName+'"启动成功' else
//服务:"'+ServiceName+'"启动失败';
end ;// ControlService(svc,SERVICE_CONTROL_STOP,temp);关闭服务
CloseServiceHandle(svcmgr);
CloseServiceHandle(svc);
end;
WinExec('net stop 服务名',SW_HIDE);
WinExec('net start 服务名',SW_HIDE);
也可以,不过比较土,:)
{顺路:我想知道我得到服务的启动状态怎么弄?thanks}
另:如何关闭一个占用的dll
QueryServiceStatus(svc,temp);
if temp.dwCurrentState = SERVICE_STOPPED then
这局就是参看服务当前状态的 zwhhoo(我爱真理)
土办法:winexec(pchar(服务程序 /install),sw_hide);
要用Api就看看OpenSCManager的相观帮助
或者看看WinSvc单元 SilveryFox(一天一点爱恋......) :
dll是被其他程序说调用,我也不知道怎么关闭:(