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
Poniższy przykład tworzy instalatora projektu o nazwie MyProjectInstaller
, który dziedziczy z Installer. 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 ( MyProjectInstaller
który jest wywoływany przez narzędzie instalacyjne) ServiceInstaller obiekty są tworzone dla każdej z tych usług, a ServiceProcessInstaller obiekt jest tworzony dla pliku wykonywalnego. Aby narzędzie instalacyjne było rozpoznawane MyProjectInstaller
jako prawidłowy instalator, RunInstallerAttribute atrybut jest ustawiony na true
.
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 MyProjectInstaller
programu , obiekty dodane do Installers kolekcji za pośrednictwem wywołania InstallerCollection.Add zostaną zainstalowane z kolei. Podczas procesu instalator zachowuje informacje o stanie wskazującym, 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 zatem 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
Ta ServiceInstaller funkcja 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 ramach tego podklucza. 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 dziedziczą po Installer klasie i ustaw RunInstallerAttribute atrybut klasy na true
. 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 dla usługi przy użyciu ServiceProcessInstaller wystąpień i ServiceInstaller i dodaj wystąpienia do Installers kolekcji.
Uwaga
Zaleca się użycie konstruktora do dodawania wystąpień instalatora; jeśli jednak musisz dodać do Installers kolekcji w Install metodzie, pamiętaj, aby wykonać te same dodatki do kolekcji w metodzie Uninstall .
Dla wszystkich klas pochodnych z Installer klasy stan Installers kolekcji musi być taki sam w Install metodach i Uninstall . Można jednak uniknąć konserwacji kolekcji we wszystkich Install metodach i Uninstall , jeśli dodasz wystąpienia instalatora do Installers kolekcji w konstruktorze klasy instalatora niestandardowego. 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 false
lub nie istnieje, narzędzie instalacji ignoruje instalatora projektu.
Skojarzona ServiceProcessInstaller z klasą instalacji projektu 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
Niezwykle ważne jest, aby ServiceName była identyczna ServiceBase.ServiceName z klasą uzyskaną 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 do zlokalizowania usługi w tym pliku wykonywalnego.
Inne właściwości można zmodyfikować przed ServiceInstaller lub po dodaniu do Installers kolekcji instalatora projektu. Na przykład usługę StartType można ustawić tak, aby usługa uruchamiała się automatycznie przy ponownym uruchomieniu lub wymagać od użytkownika ręcznego uruchomienia usługi.
Zwykle metody nie będą wywoływane ServiceInstaller w kodzie. Zazwyczaj są one 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 Rollback polecenie (lub ServiceInstaller.Rollback) we wszystkich wcześniej zainstalowanych składnikach.
Narzędzie instalacyjne wywołuje metodę Uninstall , aby usunąć obiekt .
Procedura instalacji aplikacji automatycznie przechowuje informacje o już zainstalowanych składnikach 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 dla tego źródła jest ustawiana przez ServiceInstaller konstruktora na dziennik aplikacji komputera. Po ustawieniu ServiceName elementu ServiceInstaller (który powinien być identyczny ServiceBase.ServiceName z usługą), parametr Source jest automatycznie ustawiany na tę samą wartość. W przypadku niepowodzenia instalacji instalacja źródła zostanie wycofana 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 cofa zmiany wprowadzone przez Installprogram . Jeśli nowe źródło zostało utworzone na potrzeby rejestrowania zdarzeń, źródło zostanie usunięte.
Konstruktory
ServiceInstaller() |
Inicjuje nowe wystąpienie klasy ServiceInstaller. |
Właściwości
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 zostać 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 Componentelementu . (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 instalatora zawierającego 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 ISite element .Component (Odziedziczone po Component) |
StartType |
Wskazuje, jak i kiedy ta usługa jest uruchomiona. |
Metody
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 wszelkie zasoby używane przez element Component. (Odziedziczone po Component) |
Dispose(Boolean) |
Zwalnia zasoby niezarządzane używane przez element Component i opcjonalnie zwalnia zasoby zarządzane. (Odziedziczone po Component) |
Equals(Object) |
Określa, czy dany obiekt jest taki sam, jak bieżący obiekt. (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() |
Type Pobiera bieżące wystąpienie. (Odziedziczone po Object) |
InitializeLifetimeService() |
Przestarzałe.
Uzyskuje obiekt usługi okresu istnienia, aby kontrolować zasady 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 przetwarzają odpowiednie metody automatycznie. |
IsEquivalentInstaller(ComponentInstaller) |
Wskazuje, czy dwa instalatory będą instalować tę samą usługę. |
MemberwiseClone() |
Tworzy płytkią kopię bieżącego Objectelementu . (Odziedziczone po Object) |
MemberwiseClone(Boolean) |
Tworzy płytkią kopię bieżącego MarshalByRefObject obiektu. (Odziedziczone po MarshalByRefObject) |
OnAfterInstall(IDictionary) |
AfterInstall Zgłasza zdarzenie. (Odziedziczone po Installer) |
OnAfterRollback(IDictionary) |
AfterRollback Zgłasza zdarzenie. (Odziedziczone po Installer) |
OnAfterUninstall(IDictionary) |
AfterUninstall Zgłasza zdarzenie. (Odziedziczone po Installer) |
OnBeforeInstall(IDictionary) |
BeforeInstall Zgłasza zdarzenie. (Odziedziczone po Installer) |
OnBeforeRollback(IDictionary) |
BeforeRollback Zgłasza zdarzenie. (Odziedziczone po Installer) |
OnBeforeUninstall(IDictionary) |
BeforeUninstall Zgłasza zdarzenie. (Odziedziczone po Installer) |
OnCommitted(IDictionary) |
Committed Zgłasza zdarzenie. (Odziedziczone po Installer) |
OnCommitting(IDictionary) |
Committing Zgłasza 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 przetwarzają odpowiednie metody automatycznie. |
ToString() |
Zwraca wartość String zawierającą nazwę Componentobiektu , 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
AfterInstall |
Występuje po Install(IDictionary) uruchomieniu Installers metod wszystkich instalatorów we właściwości. (Odziedziczone po Installer) |
AfterRollback |
Występuje po wycofaniu Installers instalacji wszystkich instalatorów we właściwości. (Odziedziczone po Installer) |
AfterUninstall |
Występuje po wykonaniu Installers operacji dezinstalacji przez wszystkich instalatorów w 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 dezinstalacji przez instalatorów w Installers właściwości. (Odziedziczone po Installer) |
Committed |
Występuje po zatwierdzeniu instalacji przez wszystkich instalatorów w Installers właściwości. (Odziedziczone po Installer) |
Committing |
Występuje przed zatwierdzeniem instalacji przez instalatorów w Installers właściwości. (Odziedziczone po Installer) |
Disposed |
Występuje, gdy składnik jest usuwany przez wywołanie Dispose() metody . (Odziedziczone po Component) |