Sława!
Dziś w ramach akcji ratowania doświadczenia przed sklerozą własną, zapiszę sobie jak z poziomu NSIS (podbudowa do tworzenia instalatorów dla aplikacji Windows), a nóż widelec i potomność będzie miała z tej notatki pożytek jakowyś.
Takowoż więc do obsługi usług potrzebujemy wtyczki Service Control Management (nsSCM). Wtyczka ta umożliwia na następujące operacje na usługach:
- Install - zarejstrowanie usługi
- Start - uruchomienie usługi
- Stop - zatrzymanie usługi
- QueryStatus - odpytanie o aktualny stan usługi
- Remove - wyrejestrowanie usługi
Używanie jest banalnie proste, gdyż poza rejestrowaniem usługi, sprowadza się do wywołania odpowiedniej funkcji wtyczki z podaniem nazwy usługi, a następnie zczytania wyniku operacji. Jakiś przykład? Proszę bardzo, niech będzie nim wyłączenie/włączenie usługi w zależności od jej aktualnego stanu.
Zaczniemy od odpytania o stan usługi poleceniem:
nsSCM::QueryStatus /NOUNLOAD nazwa_usługi
Polecenie to, oprócz informacji o powodzeniu/błędzie wywołania, zwróci nam stan usługi. Możliwe wartości to:
- 1 - usługa zatrzymana
- 2 - usługa w trakcie uruchamiania
- 3 - usługa w trakcie zatrzymywania
- 4 - usługa uruchomiona
- 5 - usługa w trakcie wznawiania
- 6 - usługa w trakcie wstrzymywania
- 7 - usługa wstrzymana
Załóżmy, że będziemy uruchamiać usługę, jeżeli jest zatrzymana lub wstrzymana, natomiast zatrzymywać jeżeli uruchomiona, pozastałe stany poprostu zignorujemy. Do zatrzymania usługi wykorzystamy kod:
nsSCM::Stop nazwa_usługi
Do uruchomienia natomiast:
nsSCM::Start nazwa_usługi
Tak więc nasz kod powinien uzyskać postać podobną do poniższej:
nsSCM::QueryStatus nazwa_usługi Pop $0Widzimy, więc, że usługi nie gryzą (przynajmniej nie za często ;)) i zostało nam tylko napisać aplikację, dzięki której możliwości nsSCM będziemy mogli wykorzystać, a to przecież dla nas pryszcz, co nie? ;)
${If} $0 == "success" Pop $1 ${Switch} $1 ;Usługa jest zatrzymana ${Case} 1 ;Usługa jest wstrzymana ${Case} 7 ;Uruchamiamy usługę nsSCM::Start <nazwa_usługi> Pop $2 ${If} $2 == "success" MessageBox MB_OK "Usługa uruchomiona" ${Else} MessageBox MB_ICONEXCLAMATION|MB_OK "Błąd uruchamiania" ${EndIf} ${Break} ;Usługa jest uruchomiona ${Case} 4 ;Wstrzymujemy usługę nsSCM::Stop <nazwa_usługi> Pop $2 ${If} $2 == "success" MessageBox MB_OK "Usługa zatrzymana" ${Else} MessageBox MB_ICONEXCLAMATION|MB_OK "Błąd zatrzymywania" ${EndIf} ${Break} ${EndSwitch} ${EndIf}
Brak komentarzy:
Prześlij komentarz