簡體   English   中英

如何通過Delphi禁用服務?

[英]How can I disable a service via Delphi?

我使用的例程可以通過Delphi啟動和停止服務,但我也需要能夠禁用它們,是否可能?

使用OpenService打開服務,然后通過傳遞Service_Disabled作為ChangeServiceConfigdwStartType參數來禁用它。 為其余參數指定空指針或Service_No_Change ,因為您不想更改它們。

您可以使用JEDI組件庫(JCL)中的文件JclSvcCtrl.pas。 我寫了一個你可以使用的偽示例。 但是,請注意我沒有測試它。 但以這種方式它應該工作(省略錯誤檢查):

M := TJclSCManager.Create;
M.Refresh(true);  //Not sure if true is needed or not (refresh all services)
For i := 0 to M.ServiceCount -1 do
begin
  S := M.Services[i]; //TJclNtService
  if CompareText(S.ServiceName, 'bla') then
  begin
    S.Stop;
    S.StartType := sstDisabled;   
    S.Commit;
    break;
  end;
end;

除了使用以前的方法,如果您需要更多控制,您可以使用WMI。
使用Win32_Service類可以訪問機器上安裝的所有服務信息,您可以訪問方法:啟動,停止,暫停,恢復,查詢,創建,刪除,更改,更改創建模式...

在這里( Web / SourceForge ),您可以找到一組與WMI 一起使用的組件GLibWMI組件庫 ); 有一個名為CServiceInfo thah為您提供此類的所有信息和一些方法。

除了包裝tere是一些演示; 一個叫做(ServiceControl)並實現所有方法。

替代文字

所有包都包含來源。 查看它對您有用的代碼。

問候。

ShellExecute(0, nil, 'cmd.exe', 'sc config "the service name" start=disabled', nil, SW_HIDE);
ShellExecute(0, nil, 'cmd.exe', 'sc config "the service name" start=auto', nil, SW_HIDE);
ShellExecute(0, nil, 'cmd.exe', 'sc config "the service name" start=demand', nil, SW_HIDE);

這是我用的

它只是我們發現的一些Windows API函數的一個小包裝,我們發現它們可以用來處理NT-Services。 它允許您在本地或遠程系統上查詢,啟動,停止,暫停和啟用/禁用NT服務。

http://blog.marcduerst.com/post/How-to-use-TServiceManager-to-manage-Windows-services.aspx

這讓你寫'漂亮'的delphi代碼;)

procedure DisableService(ServiceName: PChar);
var SM: TServiceManager;
begin
  SM:=TServiceManager.Create;
   try
     SM.Connect;
     SM.OpenServiceConnection(ServiceName);

   //not working with TServiceManager as is
   //but its easy to fix, see below        
    SM.DisableService;


   finally
    SM.Free;
   end;
end;

DisableService部分尚未編寫,但所需的只是

 procedure TServiceManager.DisableService;
 begin
   ChangeServiceConfig(ServiceHandle, SERVICE_NO_CHANGE,SERVICE_DISABLED,SERVICE_NO_CHANGE, nil, nil, nil, nil, nil, nil, nil);
 end;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM