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;

解决方案 »

  1.   

    当然用
       WinExec('net stop 服务名',SW_HIDE);
       WinExec('net start 服务名',SW_HIDE);
    也可以,不过比较土,:)
      

  2.   

    接分。
    {顺路:我想知道我得到服务的启动状态怎么弄?thanks}
      

  3.   

    接分
    另:如何关闭一个占用的dll
      

  4.   

    laihecongxi(兴哥) ( ) 
    QueryServiceStatus(svc,temp);
      if temp.dwCurrentState = SERVICE_STOPPED then
    这局就是参看服务当前状态的 zwhhoo(我爱真理) 
    土办法:winexec(pchar(服务程序 /install),sw_hide);
    要用Api就看看OpenSCManager的相观帮助
    或者看看WinSvc单元 SilveryFox(一天一点爱恋......) :
    dll是被其他程序说调用,我也不知道怎么关闭:(