Sign in Join
Wiki copytemporary

ServiceManager/pl: what changed

Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11*(Windows only)*
22
3-<div style="font-size:1.88em;margin:0.75em 0;">
4-
53Menedżer usług
6-
7-</div>
84
95## ServiceManager
106
117Dla Windows pakiet fcl-extra zawiera moduł o nazwie ServiceManager.
128
139Poniższy przykład sprawdza, czy usługa SamSs (Security Accounts Manager; powinien być zawsze uruchomiony) jest uruchomiona. (Odpowiednik wiersza poleceń `sc query samss`).
1410
1511### Nazwa usługi
1612
1713Pamiętaj, że jeśli tworzysz własną usługę za pomocą pakietu Lazdaemon, ważna jest nazwa usługi, której będziesz używać. Podczas gdy polecenia NET START i NET STOP używają wyświetlanej nazwy usługi, polecenie SC i poniższy kod używają wewnętrznej nazwy usługi. Wyświetlana nazwa to nazwa nadana właściwości „DisplayName” elementu utworzonego w elementach DaemonDefs. Nazwa usługi jest właściwością "Name" tego samego elementu. Wyświetlana nazwa to ta, która jest aktualnie wyświetlana w kolumnie **Nazwa** przez aplet menedżera usług MS (services.msc) Użyjmy przykładu, aby to wyjaśnić. Załóżmy, że napisałeś aplikację serwisową o nazwie **myService.exe**, w której znajduje się jeden element w DaemonDefs. Element ma nazwę „**MyServ**”, a powiązana właściwość „DisplayName” ma wartość „**Internal build service**”. Używając wiersza poleceń jako administrator możesz:
1814
1915### Zarządzanie usługami za pomocą konsoli
2016
2117Będziesz potrzebować: Microsoft .NET Framework 4.5.2 (instalator sieciowy) dla Windows Vista SP2, Windows 7 SP1, Windows 8, Windows 8.1, Windows Server 2008 SP2 Windows Server 2008 R2 SP1, Windows Server 2012 i Windows Server 2012 R2
2218
2319Aby zainstalować usługę na komputerze lokalnym, musisz uzyskać obsługę wiersza polecenia zestawu .NET SDK. 1. Wywołaj wiersz poleceń SDK, wykonaj Start \> Wszystkie programy \> Microsoft .NET Framework SDK v2.0 \> Wiersz poleceń SDK
2420
2521Instalacja usługi:
2622
2723```dos
2824\twoja\ścieżka\do\aplikacji\myService.exe --install
2925rem .... lub /install, -install też działa
3026```
3127
3228Aktywacja usługi: W tych poleceniach nie zapomnij o **podwójnych cudzysłowach**, gdy nazwa składa się z wielu słów!
3329
3430```dos
3531net start "Internal build service"
3632rem .... lub alternatywnie:
3733sc start "MyServ"
3834```
3935
4036Aby zatrzymać usługę:
4137
4238```dos
4339net stop '''"Internal build service"'''
4440rem ... lub alternatywnie
4541sc stop "'''MyServ'''"
4642```
4743
4844## Przykład kodu
4945
5046Biorąc pod uwagę powyższe, fragment kodu wywołujący poniższą funkcję wyglądałby w naszym przypadku tak:
5147
5248``` pascal
5349if IsServiceRunning('MyServ') then
5450```
5551
5652Przykładowy program::
5753
5854``` pascal
5955program ServiceTest;
6056// Sprawdź, czy dany proces jest uruchomiony.
6157{$mode objfpc}{$H+}
6258uses
6359 Classes,
6460 SysUtils,
6561 ServiceManager,
6662 JwaWinSvc {dla deklaracji usług};
6763
6864function IsServiceRunning(ServiceName: string): boolean;
6965 {opis: Sprawdza, czy usługa Windows jest uruchomiona}
7066var
7167 Services: TServiceManager;
7268 ServiceStatus: TServiceStatus;
7369begin
7470 //Sprawdza istniejące usługi
7571 //odpowiednik polecenia sc query <servicename>
7672 Services := TServiceManager.Create(nil);
7773 try
7874 try
7975 Services.Acces := SC_MANAGER_CONNECT; //Uwaga literówka w nazwie usługi.
8076 //Nie potrzebujemy więcej uprawnień dostępu niż to; domyślnie
8177 //manager usług próbuje uzyskać pełny dostęp
8278 Services.Connect; //Teraz połącz się z żądanym poziomem dostępu
8379 Services.GetServiceStatus(ServiceName, ServiceStatus);
8480 Result := (ServiceStatus.dwCurrentState = SERVICE_RUNNING);
8581 Services.Disconnect;
8682 except
8783 on E: EServiceManager do
8884 begin
8985 // Brakująca usługa może zgłosić wyjątek brakującego uchwytu? Nie?
9086 {LogOutput('Błąd podczas pobierania informacji dla usługi ' + ServiceName +
9187 '. Szczegóły techniczne: ' + E.ClassName + '/' + E.Message); }
9288 Result := False;
9389 raise; //ponownie wyrzuć oryginalny wyjątek
9490 end;
9591 on E: Exception do
9692 begin
9793 {LogOutput('Błąd podczas pobierania informacji dla usługi ' + ServiceName +
9894 '. Szczegóły techniczne: ' + E.ClassName + '/' + E.Message); }
9995 Result := False;
10096 raise; //ponownie wyrzuć oryginalny wyjątek
10197 end;
10298 end;
10399 finally
104100 Services.Free;
105101 end;
106102end;
107103
108104const
109105 ServiceToTest = 'SamSs';
110106
111107//Menedżer Zabezpieczeń Kont (SAM - Security Accounts Manager) powinien być uruchomiony, przynajmniej w systemie Vista
112108begin
113109 WriteLn('Rozpoczęcie testu dla usługi ' + ServiceToTest + '.');
114110 if IsServiceRunning(ServiceToTest) then
115111 WriteLn('Usługa ' + ServiceToTest + ' jest uruchomiona')
116112 else
117113 WriteLn('Usługa ' + ServiceToTest + ' nie jest uruchomiona');
118114end.
119115```
120116
121117## Zobacz także
122118
123119- [[Daemons and Services/pl|Demony i usługi]]
124120- [[TServiceManager/pl|TServiceManager]]
125121
126122---
127123*From the Free Pascal wiki, page "ServiceManager/pl", as it stood on 2022-01-09 after a change by FTurtle, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history