[英]How can I disable a service via Delphi?
我使用的例程可以通過Delphi啟動和停止服務,但我也需要能夠禁用它們,是否可能?
使用OpenService
打開服務,然后通過傳遞Service_Disabled
作為ChangeServiceConfig
的dwStartType
參數來禁用它。 為其余參數指定空指針或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.