Wprowadzenie do aplikacji usług systemu Windows
Uwaga
Ten artykuł nie dotyczy hostowanych usług na platformie .NET. Aby uzyskać najnowszą zawartość w usługach systemu Windows przy użyciu Microsoft.Extensions.Hosting.BackgroundService i szablonie usługi procesu roboczego, zobacz:
Usługi systemu Microsoft Windows, dawniej znane jako usługi NT, umożliwiają tworzenie długotrwałych aplikacji wykonywalnych uruchamianych we własnych sesjach systemu Windows. Te usługi można uruchamiać automatycznie po uruchomieniu komputera, można wstrzymać i uruchomić ponownie i nie wyświetlać żadnego interfejsu użytkownika. Te funkcje sprawiają, że usługi są idealne do użycia na serwerze lub zawsze, gdy potrzebujesz długotrwałych funkcji, które nie zakłócają pracy z innymi użytkownikami, którzy pracują na tym samym komputerze. Usługi można również uruchamiać w kontekście zabezpieczeń określonego konta użytkownika, które różni się od zalogowanego użytkownika lub domyślnego konta komputera. Aby uzyskać więcej informacji na temat usług i sesji systemu Windows, zobacz dokumentację zestawu Windows SDK.
Usługi można łatwo tworzyć, tworząc aplikację zainstalowaną jako usługę. Załóżmy na przykład, że chcesz monitorować dane licznika wydajności i reagować na wartości progowe. Możesz napisać aplikację usługi systemu Windows, która nasłuchuje danych licznika wydajności, wdrożyć aplikację i rozpocząć zbieranie i analizowanie danych.
Usługę można utworzyć jako projekt programu Microsoft Visual Studio, definiując w nim kod, który kontroluje, jakie polecenia można wysyłać do usługi i jakie akcje należy podjąć po odebraniu tych poleceń. Polecenia, które można wysyłać do usługi, obejmują uruchamianie, wstrzymanie, wznawianie i zatrzymywanie usługi; Można również wykonywać polecenia niestandardowe.
Po utworzeniu i utworzeniu aplikacji można ją zainstalować, uruchamiając narzędzie wiersza polecenia InstallUtil.exe i przekazując ścieżkę do pliku wykonywalnego usługi. Następnie możesz użyć Menedżera kontroli usług, aby uruchomić, zatrzymać, wstrzymać, wznowić i skonfigurować usługę. Można również wykonać wiele z tych samych zadań w węźle Usługi w Eksploratorze serwera lub za pomocą ServiceController klasy .
Aplikacje usług a inne aplikacje programu Visual Studio
Aplikacje usług działają inaczej niż wiele innych typów projektów na kilka sposobów:
Skompilowany plik wykonywalny tworzony przez projekt aplikacji usługi musi zostać zainstalowany na serwerze, zanim projekt będzie mógł działać w zrozumiały sposób. Nie można debugować ani uruchamiać aplikacji usługi, naciskając klawisz F5 lub F11; Nie można natychmiast uruchomić usługi ani przejść do jej kodu. Zamiast tego należy zainstalować i uruchomić usługę, a następnie dołączyć debuger do procesu usługi. Aby uzyskać więcej informacji, zobacz How to: Debug Windows Service Applications (Instrukcje: debugowanie aplikacji usługi systemu Windows).
W przeciwieństwie do niektórych typów projektów należy utworzyć składniki instalacyjne dla aplikacji usług. Składniki instalacyjne instalują i rejestrują usługę na serwerze i tworzą wpis dla usługi za pomocą Menedżera kontroli usług systemu Windows. Aby uzyskać więcej informacji, zobacz How to: Add Installers to Your Service Application (Instrukcje: dodawanie instalatorów do aplikacji usługi).
Main
Metoda aplikacji usługi musi wydać polecenie Uruchom dla usług, które zawiera projekt. MetodaRun
ładuje usługi do Menedżera kontroli usług na odpowiednim serwerze. Jeśli używasz szablonu projektu Usługi systemu Windows, ta metoda zostanie napisana automatycznie. Należy pamiętać, że ładowanie usługi nie jest takie samo jak uruchamianie usługi. Aby uzyskać więcej informacji, zobacz "Okres istnienia usługi" poniżej.Aplikacje usługi systemu Windows działają na innej stacji okien niż interaktywna stacja zalogowanego użytkownika. Stacja okien jest bezpiecznym obiektem, który zawiera Schowek, zestaw atomów globalnych i grupę obiektów pulpitu. Ponieważ stacja usługi systemu Windows nie jest interaktywną stacją, okna dialogowe podniesione z poziomu aplikacji usługi systemu Windows nie będą widoczne i mogą spowodować, że program przestanie odpowiadać. Podobnie komunikaty o błędach powinny być rejestrowane w dzienniku zdarzeń systemu Windows, a nie zgłaszane w interfejsie użytkownika.
Klasy usług systemu Windows obsługiwane przez program .NET Framework nie obsługują interakcji ze stacjami interaktywnymi, czyli zalogowanym użytkownikiem. Program .NET Framework nie zawiera również klas reprezentujących stacje i komputery stacjonarne. Jeśli usługa systemu Windows musi korzystać z innych stacji, musisz uzyskać dostęp do niezarządzanego interfejsu API systemu Windows. Aby uzyskać więcej informacji, zobacz dokumentację zestawu Windows SDK.
Interakcja usługi systemu Windows z użytkownikiem lub innymi stacjami musi być starannie zaprojektowana w celu uwzględnienia scenariuszy, takich jak brak zalogowanego użytkownika, lub użytkownik mający nieoczekiwany zestaw obiektów pulpitu. W niektórych przypadkach może być bardziej odpowiednie napisanie aplikacji systemu Windows działającej pod kontrolą użytkownika.
Aplikacje usług systemu Windows działają we własnym kontekście zabezpieczeń i są uruchamiane przed zalogowaniem się użytkownika na komputerze z systemem Windows, na którym są zainstalowane. Należy dokładnie zaplanować konto użytkownika, w ramach którego należy uruchomić usługę; usługa uruchomiona na koncie systemowym ma więcej uprawnień i uprawnień niż konto użytkownika.
Okres istnienia usługi
Usługa przechodzi przez kilka stanów wewnętrznych w swoim okresie istnienia. Najpierw usługa jest zainstalowana w systemie, na którym zostanie uruchomiona. Ten proces wykonuje instalatory projektu usługi i ładuje usługę do Menedżera kontroli usług dla tego komputera. Menedżer kontroli usług jest centralnym narzędziem udostępnianym przez system Windows do administrowania usługami.
Po załadowaniu usługi należy ją uruchomić. Uruchomienie usługi umożliwia jej rozpoczęcie działania. Usługę można uruchomić z Poziomu Menedżera kontroli usług, w Eksploratorze serwera lub z kodu, wywołując metodę Start . Metoda Start przekazuje przetwarzanie do metody aplikacji OnStart i przetwarza dowolny kod, który został tam zdefiniowany.
Uruchomiona usługa może istnieć w tym stanie na czas nieokreślony, dopóki nie zostanie zatrzymana lub wstrzymana lub dopóki komputer nie zostanie zamknięty. Usługa może istnieć w jednym z trzech podstawowych stanów: Running, lub PausedStopped. Usługa może również zgłosić stan oczekującego polecenia: ContinuePending, , PausePendingStartPendinglub StopPending. Te stany wskazują, że wydano polecenie, takie jak polecenie wstrzymujące uruchomioną usługę, ale nie zostało jeszcze przeprowadzone. Możesz wykonać zapytanie w Status celu określenia stanu, w którym znajduje się usługa, lub użyć WaitForStatus polecenia , aby wykonać akcję w przypadku wystąpienia dowolnego z tych stanów.
Można wstrzymać, zatrzymać lub wznowić usługę z Menedżera kontroli usług, z Eksploratora serwera lub wywołując metody w kodzie. Każda z tych akcji może wywołać skojarzą procedurę w usłudze (OnStop, OnPause, lub OnContinue), w której można zdefiniować dodatkowe przetwarzanie, które ma być wykonywane, gdy usługa ulegnie zmianie stanu.
Typy usług
Istnieją dwa typy usług, które można utworzyć w programie Visual Studio przy użyciu programu .NET Framework. Usługi, które są jedyną usługą w procesie, są przypisane typ Win32OwnProcess. Usługi, które współużytkują proces z inną usługą, mają przypisany typ Win32ShareProcess. Typ usługi można pobrać, wykonując ServiceType zapytanie dotyczące właściwości.
Czasami możesz zobaczyć inne typy usług, jeśli wysyłasz zapytania dotyczące istniejących usług, które nie zostały utworzone w programie Visual Studio. Aby uzyskać więcej informacji na ten temat, zobacz ServiceType.
Usługi i składnik ServiceController
Składnik ServiceController służy do nawiązywania połączenia z zainstalowaną usługą i manipulowania jej stanem ServiceController . Za pomocą składnika można uruchomić i zatrzymać usługę, wstrzymać i kontynuować jej działanie oraz wysyłać polecenia niestandardowe do usługi. Nie trzeba jednak używać ServiceController składnika podczas tworzenia aplikacji usługi. W większości przypadków ServiceController składnik powinien istnieć w oddzielnej aplikacji niż aplikacja usługi systemu Windows, która definiuje usługę.
Aby uzyskać więcej informacji, zobacz ServiceController.
Wymagania
Usługi muszą być tworzone w projekcie aplikacji usługi systemu Windows lub w innym projekcie z obsługą programu .NET Framework, który tworzy plik .exe podczas kompilowania ServiceBase i dziedziczenia po klasie.
Projekty zawierające usługi systemu Windows muszą mieć składniki instalacji dla projektu i jego usług. Można to łatwo osiągnąć w oknie Właściwości . Aby uzyskać więcej informacji, zobacz How to: Add Installers to Your Service Application (Instrukcje: dodawanie instalatorów do aplikacji usługi).
Zobacz też
- Aplikacje usług systemu Windows
- Architektura programowania aplikacji usług
- Instrukcje: tworzenie usług systemu Windows
- Instrukcje: instalowanie i odinstalowywanie usług
- Instrukcje: uruchamianie usług
- Instrukcje: debugowanie aplikacji usług systemu Windows
- Przewodnik: tworzenie aplikacji usługowej systemu Windows w Projektancie składników
- Instrukcje: dodawanie instalatorów od aplikacji usług