ServiceInstaller Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Instaluje klasę, która rozszerza ServiceBase się w celu zaimplementowania usługi. Ta klasa jest wywoływana przez narzędzie instalacyjne podczas instalowania aplikacji usługi.
public ref class ServiceInstaller : System::Configuration::Install::ComponentInstaller
public class ServiceInstaller : System.Configuration.Install.ComponentInstaller
type ServiceInstaller = class
inherit ComponentInstaller
Public Class ServiceInstaller
Inherits ComponentInstaller
- Dziedziczenie
Przykłady
W poniższym przykładzie tworzony jest instalator projektu o nazwie MyProjectInstaller, który dziedziczy z Installerelementu . Zakłada się, że istnieje plik wykonywalny usługi zawierający dwie usługi "Hello-World Service 1" i "Hello-World Service 2". W konstruktorze programu MyProjectInstaller (który będzie wywoływany przez narzędzie instalacyjne) ServiceInstaller obiekty są tworzone dla każdej z tych usług, a obiekt ServiceProcessInstaller jest tworzony dla pliku wykonywalnego. Aby narzędzie instalacyjne rozpoznawało MyProjectInstaller jako prawidłowy instalator, RunInstallerAttribute atrybut jest ustawiony na truewartość .
Opcjonalne właściwości są ustawiane w instalatorze procesu, a instalatory usług przed dodaniu instalatorów do Installers kolekcji. Gdy narzędzie instalacyjne uzyskuje dostęp do MyProjectInstallerprogramu , obiekty dodane do Installers kolekcji za pośrednictwem wywołania InstallerCollection.Add zostaną zainstalowane z kolei. Podczas procesu instalator przechowuje informacje o stanie wskazujące, które obiekty zostały zainstalowane, dzięki czemu każdy z nich może zostać wycofany z kolei, jeśli wystąpi awaria instalacji.
Zwykle nie można jawnie utworzyć wystąpienia klasy instalatora projektu. Można go utworzyć i dodać RunInstallerAttribute atrybut do składni, ale jest to narzędzie instalacyjne, które faktycznie wywołuje, a w związku z tym tworzy wystąpienie klasy.
#using <System.dll>
#using <System.ServiceProcess.dll>
#using <System.Configuration.Install.dll>
using namespace System;
using namespace System::Collections;
using namespace System::Configuration::Install;
using namespace System::ServiceProcess;
using namespace System::ComponentModel;
[RunInstaller(true)]
public ref class MyProjectInstaller : public Installer
{
private:
ServiceInstaller^ serviceInstaller1;
ServiceInstaller^ serviceInstaller2;
ServiceProcessInstaller^ processInstaller;
public:
MyProjectInstaller()
{
// Instantiate installers for process and services.
processInstaller = gcnew ServiceProcessInstaller;
serviceInstaller1 = gcnew ServiceInstaller;
serviceInstaller2 = gcnew ServiceInstaller;
// The services run under the system account.
processInstaller->Account = ServiceAccount::LocalSystem;
// The services are started manually.
serviceInstaller1->StartType = ServiceStartMode::Manual;
serviceInstaller2->StartType = ServiceStartMode::Manual;
// ServiceName must equal those on ServiceBase derived classes.
serviceInstaller1->ServiceName = "Hello-World Service 1";
serviceInstaller2->ServiceName = "Hello-World Service 2";
// Add installers to collection. Order is not important.
Installers->Add( serviceInstaller1 );
Installers->Add( serviceInstaller2 );
Installers->Add( processInstaller );
}
static void Main()
{
Console::WriteLine("Usage: InstallUtil.exe [<service>.exe]");
}
};
int main()
{
MyProjectInstaller::Main();
}
using System;
using System.Collections;
using System.Configuration.Install;
using System.ServiceProcess;
using System.ComponentModel;
[RunInstaller(true)]
public class MyProjectInstaller : Installer
{
private ServiceInstaller serviceInstaller1;
private ServiceInstaller serviceInstaller2;
private ServiceProcessInstaller processInstaller;
public MyProjectInstaller()
{
// Instantiate installers for process and services.
processInstaller = new ServiceProcessInstaller();
serviceInstaller1 = new ServiceInstaller();
serviceInstaller2 = new ServiceInstaller();
// The services run under the system account.
processInstaller.Account = ServiceAccount.LocalSystem;
// The services are started manually.
serviceInstaller1.StartType = ServiceStartMode.Manual;
serviceInstaller2.StartType = ServiceStartMode.Manual;
// ServiceName must equal those on ServiceBase derived classes.
serviceInstaller1.ServiceName = "Hello-World Service 1";
serviceInstaller2.ServiceName = "Hello-World Service 2";
// Add installers to collection. Order is not important.
Installers.Add(serviceInstaller1);
Installers.Add(serviceInstaller2);
Installers.Add(processInstaller);
}
public static void Main()
{
Console.WriteLine("Usage: InstallUtil.exe [<service>.exe]");
}
}
Imports System.Collections
Imports System.Configuration.Install
Imports System.ServiceProcess
Imports System.ComponentModel
<RunInstallerAttribute(True)> _
Public Class MyProjectInstaller
Inherits Installer
Private serviceInstaller1 As ServiceInstaller
Private serviceInstaller2 As ServiceInstaller
Private processInstaller As ServiceProcessInstaller
Public Sub New()
' Instantiate installers for process and services.
processInstaller = New ServiceProcessInstaller()
serviceInstaller1 = New ServiceInstaller()
serviceInstaller2 = New ServiceInstaller()
' The services will run under the system account.
processInstaller.Account = ServiceAccount.LocalSystem
' The services will be started manually.
serviceInstaller1.StartType = ServiceStartMode.Manual
serviceInstaller2.StartType = ServiceStartMode.Manual
' ServiceName must equal those on ServiceBase derived classes.
serviceInstaller1.ServiceName = "Hello-World Service 1"
serviceInstaller2.ServiceName = "Hello-World Service 2"
' Add installers to collection. Order is not important.
Installers.Add(serviceInstaller1)
Installers.Add(serviceInstaller2)
Installers.Add(processInstaller)
End Sub
Public Shared Sub Main()
Console.WriteLine("Usage: InstallUtil.exe [<service>.exe]")
End Sub
End Class
Uwagi
Funkcja ServiceInstaller działa specyficznie dla usługi, z którą jest skojarzona. Jest on używany przez narzędzie instalacyjne do zapisywania wartości rejestru skojarzonych z usługą w podkluczu w kluczu rejestru HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services. Usługa jest identyfikowana przez nazwę usługi w tym podkluczu. Podklucz zawiera również nazwę pliku wykonywalnego lub .dll, do którego należy usługa.
Aby zainstalować usługę, utwórz klasę instalatora projektu, która dziedziczy z Installer klasy, i ustaw RunInstallerAttribute atrybut w klasie na truewartość . W projekcie utwórz jedno ServiceProcessInstaller wystąpienie dla aplikacji usługi i jedno ServiceInstaller wystąpienie dla każdej usługi w aplikacji. W konstruktorze klasy instalatora projektu ustaw właściwości instalacji usługi przy użyciu ServiceProcessInstaller wystąpień i ServiceInstaller i dodaj wystąpienia do Installers kolekcji.
Uwaga / Notatka
Zaleca się użycie konstruktora do dodawania wystąpień instalatora; jeśli jednak musisz dodać do Installers kolekcji w metodzie Install , pamiętaj, aby wykonać te same dodatki do kolekcji w metodzie Uninstall .
W przypadku wszystkich klas pochodnych z Installer klasy stan Installers kolekcji musi być taki sam w metodach Install i Uninstall . Można jednak uniknąć konserwacji kolekcji we wszystkich Install metodach i Uninstall , jeśli dodasz wystąpienia instalatora do Installers kolekcji w niestandardowym konstruktorze klasy instalatora. Po wywołaniu narzędzia instalacyjnego szuka atrybutu RunInstallerAttribute . Jeśli atrybut to true, narzędzie instaluje wszystkie usługi dodane do Installers kolekcji skojarzonej z instalatorem projektu. Jeśli RunInstallerAttribute jest lub false nie istnieje, narzędzie instalacji ignoruje instalatora projektu.
Klasa ServiceProcessInstaller instalacji skojarzonej z projektem instaluje informacje wspólne dla wszystkich ServiceInstaller wystąpień w projekcie. Jeśli ta usługa ma coś, co oddziela ją od innych usług w projekcie instalacyjnym, te informacje specyficzne dla usługi są instalowane przez tę metodę.
Uwaga / Notatka
Istotne jest, aby klasa ServiceNameServiceBase.ServiceName pochodziła z ServiceBaseklasy . Zwykle wartość ServiceBase.ServiceName właściwości usługi jest ustawiana w funkcji Main() pliku wykonywalnego aplikacji usługi. Program Service Control Manager używa ServiceInstaller.ServiceName właściwości , aby zlokalizować usługę w tym pliku wykonywalnego.
Inne właściwości można modyfikować przed ServiceInstaller lub po dodaniu ich do Installers kolekcji instalatora projektu. Na przykład usługę StartType można ustawić tak, aby automatycznie uruchamiała usługę po ponownym uruchomieniu lub wymagać od użytkownika ręcznego uruchomienia usługi.
Zwykle metody w kodzie nie są wywoływane ServiceInstaller ; są one zwykle wywoływane tylko przez narzędzie instalacyjne. Narzędzie instalacyjne automatycznie wywołuje ServiceProcessInstaller.Install metody i ServiceInstaller.Install podczas procesu instalacji. W razie potrzeby usuwa błędy, wywołując metodę Rollback (lub ServiceInstaller.Rollback) we wszystkich wcześniej zainstalowanych składnikach.
Narzędzie instalacyjne wywołuje polecenie Uninstall w celu usunięcia obiektu.
Rutynowa instalacja aplikacji automatycznie przechowuje informacje o składnikach, które zostały już zainstalowane, przy użyciu instalatora Installer.Contextprojektu . Te informacje o stanie są stale aktualizowane jako ServiceProcessInstaller wystąpienie, a każde ServiceInstaller wystąpienie jest instalowane przez narzędzie. Zwykle kod nie musi jawnie modyfikować informacji o stanie.
Po zakończeniu instalacji program automatycznie tworzy element EventLogInstaller w celu zainstalowania źródła dziennika zdarzeń skojarzonego z klasą pochodną ServiceBase . Właściwość Log tego źródła jest ustawiana przez ServiceInstaller konstruktora na dziennik aplikacji komputera. Po ustawieniu ServiceNameServiceInstaller wartości (która powinna być identyczna z ServiceBase.ServiceName usługą), parametr Source jest automatycznie ustawiany na tę samą wartość. W przypadku niepowodzenia instalacji instalacja źródła jest cofana wraz z wcześniej zainstalowanymi usługami.
Metoda Uninstall próbuje zatrzymać usługę, jeśli jest uruchomiona. Niezależnie od tego, czy to się powiedzie, czy nie, Uninstall cofnie zmiany wprowadzone przez Installprogram . Jeśli nowe źródło zostało utworzone na potrzeby rejestrowania zdarzeń, źródło zostanie usunięte.
Konstruktory
| Nazwa | Opis |
|---|---|
| ServiceInstaller() |
Inicjuje nowe wystąpienie klasy ServiceInstaller. |
Właściwości
| Nazwa | Opis |
|---|---|
| CanRaiseEvents |
Pobiera wartość wskazującą, czy składnik może zgłosić zdarzenie. (Odziedziczone po Component) |
| Container |
Pobiera element IContainer zawierający element Component. (Odziedziczone po Component) |
| Context |
Pobiera lub ustawia informacje o bieżącej instalacji. (Odziedziczone po Installer) |
| DelayedAutoStart |
Pobiera lub ustawia wartość wskazującą, czy usługa powinna być opóźniona od uruchomienia do momentu uruchomienia innych automatycznie uruchomionych usług. |
| Description |
Pobiera lub ustawia opis usługi. |
| DesignMode |
Pobiera wartość wskazującą, czy Component element jest obecnie w trybie projektowania. (Odziedziczone po Component) |
| DisplayName |
Wskazuje przyjazną nazwę identyfikującą usługę użytkownikowi. |
| Events |
Pobiera listę programów obsługi zdarzeń dołączonych do tego elementu Component. (Odziedziczone po Component) |
| HelpText |
Pobiera tekst pomocy dla wszystkich instalatorów w kolekcji instalatora. (Odziedziczone po Installer) |
| Installers |
Pobiera kolekcję instalatorów, które zawiera ten instalator. (Odziedziczone po Installer) |
| Parent |
Pobiera lub ustawia instalator zawierający kolekcję, do którego należy ten instalator. (Odziedziczone po Installer) |
| ServiceName |
Wskazuje nazwę używaną przez system do identyfikowania tej usługi. Ta właściwość musi być identyczna z ServiceName usługą, którą chcesz zainstalować. |
| ServicesDependedOn |
Wskazuje usługi, które muszą być uruchomione dla tej usługi do uruchomienia. |
| Site |
Pobiera lub ustawia wartość ISite .Component (Odziedziczone po Component) |
| StartType |
Wskazuje, jak i kiedy ta usługa jest uruchomiona. |
Metody
| Nazwa | Opis |
|---|---|
| Commit(IDictionary) |
Po zastąpieniu w klasie pochodnej kończy transakcję instalacji. (Odziedziczone po Installer) |
| CopyFromComponent(IComponent) |
Kopiuje właściwości z wystąpienia ServiceBase do tego instalatora. |
| CreateObjRef(Type) |
Tworzy obiekt zawierający wszystkie istotne informacje wymagane do wygenerowania serwera proxy używanego do komunikowania się z obiektem zdalnym. (Odziedziczone po MarshalByRefObject) |
| Dispose() |
Zwalnia wszystkie zasoby używane przez program Component. (Odziedziczone po Component) |
| Dispose(Boolean) |
Zwalnia niezarządzane zasoby używane przez Component program i opcjonalnie zwalnia zarządzane zasoby. (Odziedziczone po Component) |
| Equals(Object) |
Określa, czy określony obiekt jest równy bieżącemu obiektowi. (Odziedziczone po Object) |
| GetHashCode() |
Służy jako domyślna funkcja skrótu. (Odziedziczone po Object) |
| GetLifetimeService() |
Przestarzałe.
Pobiera bieżący obiekt usługi okresu istnienia, który kontroluje zasady okresu istnienia dla tego wystąpienia. (Odziedziczone po MarshalByRefObject) |
| GetService(Type) |
Zwraca obiekt reprezentujący usługę dostarczaną przez Component obiekt lub przez obiekt Container. (Odziedziczone po Component) |
| GetType() |
Pobiera Type bieżącego wystąpienia. (Odziedziczone po Object) |
| InitializeLifetimeService() |
Przestarzałe.
Uzyskuje obiekt usługi okresu istnienia w celu kontrolowania zasad okresu istnienia dla tego wystąpienia. (Odziedziczone po MarshalByRefObject) |
| Install(IDictionary) |
Instaluje usługę, zapisując informacje o aplikacji usługi w rejestrze. Ta metoda ma być używana przez narzędzia instalacyjne, które automatycznie przetwarzają odpowiednie metody. |
| IsEquivalentInstaller(ComponentInstaller) |
Wskazuje, czy dwa instalatory będą instalować tę samą usługę. |
| MemberwiseClone() |
Tworzy płytkią kopię bieżącego Object. (Odziedziczone po Object) |
| MemberwiseClone(Boolean) |
Tworzy płytkią kopię bieżącego MarshalByRefObject obiektu. (Odziedziczone po MarshalByRefObject) |
| OnAfterInstall(IDictionary) |
AfterInstall Wywołuje zdarzenie. (Odziedziczone po Installer) |
| OnAfterRollback(IDictionary) |
AfterRollback Wywołuje zdarzenie. (Odziedziczone po Installer) |
| OnAfterUninstall(IDictionary) |
AfterUninstall Wywołuje zdarzenie. (Odziedziczone po Installer) |
| OnBeforeInstall(IDictionary) |
BeforeInstall Wywołuje zdarzenie. (Odziedziczone po Installer) |
| OnBeforeRollback(IDictionary) |
BeforeRollback Wywołuje zdarzenie. (Odziedziczone po Installer) |
| OnBeforeUninstall(IDictionary) |
BeforeUninstall Wywołuje zdarzenie. (Odziedziczone po Installer) |
| OnCommitted(IDictionary) |
Committed Wywołuje zdarzenie. (Odziedziczone po Installer) |
| OnCommitting(IDictionary) |
Committing Wywołuje zdarzenie. (Odziedziczone po Installer) |
| Rollback(IDictionary) |
Przywraca informacje o aplikacji usługi zapisywane w rejestrze przez procedurę instalacji. Ta metoda ma być używana przez narzędzia instalacyjne, które automatycznie przetwarzają odpowiednie metody. |
| ToString() |
Zwraca wartość zawierającą String nazwę Component, jeśli istnieje. Ta metoda nie powinna być zastępowana. (Odziedziczone po Component) |
| Uninstall(IDictionary) |
Odinstalowuje usługę, usuwając informacje o niej z rejestru. |
Zdarzenia
| Nazwa | Opis |
|---|---|
| AfterInstall |
Występuje po Install(IDictionary) uruchomieniu metod wszystkich instalatorów we Installers właściwości . (Odziedziczone po Installer) |
| AfterRollback |
Występuje po wycofaniu instalacji wszystkich instalatorów we Installers właściwości . (Odziedziczone po Installer) |
| AfterUninstall |
Występuje po wykonaniu Installers operacji odinstalowywania wszystkich instalatorów we właściwości. (Odziedziczone po Installer) |
| BeforeInstall |
Występuje przed uruchomieniem Install(IDictionary) metody każdego instalatora w kolekcji instalatora. (Odziedziczone po Installer) |
| BeforeRollback |
Występuje przed wycofaniem instalatorów we Installers właściwości . (Odziedziczone po Installer) |
| BeforeUninstall |
Występuje przed wykonaniem operacji odinstalowywania przez instalatorów w Installers właściwości . (Odziedziczone po Installer) |
| Committed |
Występuje po zatwierdzeniu instalacji przez wszystkie instalatory we Installers właściwości. (Odziedziczone po Installer) |
| Committing |
Występuje przed instalatorami we Installers właściwości zatwierdzenia instalacji. (Odziedziczone po Installer) |
| Disposed |
Występuje, gdy składnik jest usuwany przez wywołanie Dispose() metody . (Odziedziczone po Component) |