Sign in Join
Wiki copytemporary

ServiceManager/pl: what changed

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

Title: ServiceManager/pl

OldNewLine
1+*(Windows only)*
2+
3+<div style="font-size:1.88em;margin:0.75em 0;">
4+
5+Menedżer usług
6+
7+</div>
8+
9+## ServiceManager
10+
11+Dla Windows pakiet fcl-extra zawiera moduł o nazwie ServiceManager.
12+
13+Poniższy przykład sprawdza, czy usługa SamSs (Security Accounts Manager; powinien być zawsze uruchomiony) jest uruchomiona. (Odpowiednik wiersza poleceń `sc query samss`).
14+
15+### Nazwa usługi
16+
17+Pamię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:
18+
19+### Zarządzanie usługami za pomocą konsoli
20+
21+Bę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
22+
23+Aby 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
24+
25+Instalacja usługi:
26+
27+```dos
28+\twoja\ścieżka\do\aplikacji\myService.exe --install
29+rem .... lub /install, -install też działa
30+```
31+
32+Aktywacja usługi: W tych poleceniach nie zapomnij o **podwójnych cudzysłowach**, gdy nazwa składa się z wielu słów!
33+
34+```dos
35+net start "Internal build service"
36+rem .... lub alternatywnie:
37+sc start "MyServ"
38+```
39+
40+Aby zatrzymać usługę:
41+
42+```dos
43+net stop '''"Internal build service"'''
44+rem ... lub alternatywnie
45+sc stop "'''MyServ'''"
46+```
47+
48+## Przykład kodu
49+
50+Biorąc pod uwagę powyższe, fragment kodu wywołujący poniższą funkcję wyglądałby w naszym przypadku tak:
51+
52+``` pascal
53+if IsServiceRunning('MyServ') then
54+```
55+
56+Przykładowy program::
57+
58+``` pascal
59+program ServiceTest;
60+// Sprawdź, czy dany proces jest uruchomiony.
61+{$mode objfpc}{$H+}
62+uses
63+ Classes,
64+ SysUtils,
65+ ServiceManager,
66+ JwaWinSvc {dla deklaracji usług};
67+
68+function IsServiceRunning(ServiceName: string): boolean;
69+ {opis: Sprawdza, czy usługa Windows jest uruchomiona}
70+var
71+ Services: TServiceManager;
72+ ServiceStatus: TServiceStatus;
73+begin
74+ //Sprawdza istniejące usługi
75+ //odpowiednik polecenia sc query <servicename>
76+ Services := TServiceManager.Create(nil);
77+ try
78+ try
79+ Services.Acces := SC_MANAGER_CONNECT; //Uwaga literówka w nazwie usługi.
80+ //Nie potrzebujemy więcej uprawnień dostępu niż to; domyślnie
81+ //manager usług próbuje uzyskać pełny dostęp
82+ Services.Connect; //Teraz połącz się z żądanym poziomem dostępu
83+ Services.GetServiceStatus(ServiceName, ServiceStatus);
84+ Result := (ServiceStatus.dwCurrentState = SERVICE_RUNNING);
85+ Services.Disconnect;
86+ except
87+ on E: EServiceManager do
88+ begin
89+ // Brakująca usługa może zgłosić wyjątek brakującego uchwytu? Nie?
90+ {LogOutput('Błąd podczas pobierania informacji dla usługi ' + ServiceName +
91+ '. Szczegóły techniczne: ' + E.ClassName + '/' + E.Message); }
92+ Result := False;
93+ raise; //ponownie wyrzuć oryginalny wyjątek
94+ end;
95+ on E: Exception do
96+ begin
97+ {LogOutput('Błąd podczas pobierania informacji dla usługi ' + ServiceName +
98+ '. Szczegóły techniczne: ' + E.ClassName + '/' + E.Message); }
99+ Result := False;
100+ raise; //ponownie wyrzuć oryginalny wyjątek
101+ end;
102+ end;
103+ finally
104+ Services.Free;
105+ end;
106+end;
107+
108+const
109+ ServiceToTest = 'SamSs';
110+
111+//Menedżer Zabezpieczeń Kont (SAM - Security Accounts Manager) powinien być uruchomiony, przynajmniej w systemie Vista
112+begin
113+ WriteLn('Rozpoczęcie testu dla usługi ' + ServiceToTest + '.');
114+ if IsServiceRunning(ServiceToTest) then
115+ WriteLn('Usługa ' + ServiceToTest + ' jest uruchomiona')
116+ else
117+ WriteLn('Usługa ' + ServiceToTest + ' nie jest uruchomiona');
118+end.
119+```
120+
121+## Zobacz także
122+
123+- [[Daemons and Services/pl|Demony i usługi]]
124+- [[TServiceManager/pl|TServiceManager]]
125+
126+---
127+*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