Exemplarische Vorgehensweise: Erstellen einer Windows-Dienstanwendung im Komponenten-Designer

Tipp

Die Vorlage Windows-Dienst und die entsprechenden Funktionen stehen in der Standard Edition von Visual Studio nicht zur Verfügung.

In den Vorgehensweisen in diesem Thema wird beschrieben, wie eine einfache Windows-Dienstanwendung erstellt wird, die Meldungen in ein Ereignisprotokoll schreibt. Unter anderen müssen die folgenden grundlegenden Schritte ausgeführt werden, um den Dienst zu erstellen und zu verwenden:

  • Erstellen Sie ein Projekt mit der Vorlage für Windows-Dienst-Anwendungen. Mit dieser Vorlage wird eine Klasse erstellt, die aus ServiceBase geerbt wird. Außerdem wird ein Großteil des grundlegenden Dienstcodes geschrieben, z. B. der Code zum Starten des Diensts.

  • Schreiben Sie Code für die Prozeduren OnStart und OnStop, und überschreiben Sie die Methoden, die Sie erneut definieren möchten.

  • Fügen Sie die für die Dienstanwendung erforderlichen Installationsprogramme hinzu. Standardmäßig wird eine Klasse mit zwei oder mehr Installationsprogrammen zur Anwendung hinzugefügt, wenn Sie auf den Link Installer hinzufügen klicken: eines zur Installation des Prozesses und eines für jeden zugeordneten Dienst, den das Projekt enthält.

  • Erstellen Sie das Projekt.

  • Erstellen Sie ein Setup-Projekt zur Installation des Diensts, und installieren Sie den Dienst anschließend.

  • Öffnen Sie den Dienststeuerungs-Manager von Windows 2000, und starten Sie den Dienst.

Erstellen Sie zunächst das Projekt, und legen Sie die Werte fest, die für die korrekte Funktion des Diensts erforderlich sind.

Tipp

Ihr Computer zeigt möglicherweise für einige der Elemente der Visual Studio-Benutzeroberfläche in der folgenden Anleitung andere Namen oder Standorte an. Diese Elemente sind von der jeweiligen Visual Studio-Version und den verwendeten Einstellungen abhängig. Weitere Informationen finden Sie unter Visual Studio-Einstellungen.

Erstellen eines Diensts

So erstellen und konfigurieren Sie einen Dienst

  1. Klicken Sie im Menü Datei auf Neues Projekt.

    Das Dialogfeld Neues Projekt wird angezeigt.

  2. Wählen Sie Windows-Dienst in der Liste der Projektvorlagen für Visual Basic oder Visual C# aus, und nennen Sie das Projekt MyNewService. Klicken Sie auf OK.

    Tipp

    Die Projektvorlage fügt automatisch die Komponentenklasse Service1 hinzu, die von System.ServiceProcess.ServiceBase erbt.

  3. Klicken Sie auf den Designer, um Service1 auszuwählen. Legen Sie anschließend im Eigenschaftenfenster die ServiceName-Eigenschaft und die (Name)-Eigenschaft für Service1 auf MyNewService fest.

Hinzufügen von Features zum Dienst

Im nächsten Abschnitt fügen Sie dem Windows-Dienst ein benutzerdefiniertes Ereignisprotokoll hinzu. Ereignisprotokolle sind Windows-Diensten in keiner Weise zugeordnet. Hier wird die EventLog-Komponente als Beispiel für die Art der Komponente verwendet, die Sie einem Windows-Dienst hinzufügen können.

So fügen Sie dem Dienst eine benutzerdefinierte Ereignisprotokollfunktion hinzu

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf Service1.vb oder Service1.cs, und wählen Sie Ansicht-Designer.

  2. Ziehen Sie in der Toolbox von der Registerkarte Komponenten eine EventLog-Komponente in den Designer.

  3. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf Service1.vb oder Service1.cs, und wählen Sie Code anzeigen.

  4. Fügen Sie den Konstruktor hinzu, oder bearbeiten Sie ihn, um ein benutzerdefiniertes Ereignisprotokoll zu definieren.

    ' To access the constructor in Visual Basic, select New from the
    ' method name drop-down list. 
    Public Sub New()
      MyBase.New()
      InitializeComponent()
      If Not System.Diagnostics.EventLog.SourceExists("MySource") Then
          System.Diagnostics.EventLog.CreateEventSource("MySource",
          "MyNewLog")
      End If
      EventLog1.Source = "MySource"
      EventLog1.Log = "MyNewLog"
    End Sub
    
        public MyNewService()
        {
            InitializeComponent();
            if (!System.Diagnostics.EventLog.SourceExists("MySource")) 
            {         
                    System.Diagnostics.EventLog.CreateEventSource(
                        "MySource","MyNewLog");
            }
            eventLog1.Source = "MySource";
            eventLog1.Log = "MyNewLog";
        }
    

So legen Sie fest, was beim Starten des Diensts ausgeführt wird

  • Suchen Sie im Code-Editor die OnStart-Methode, die beim Erstellen des Projekts automatisch überschrieben wurde, und schreiben Sie Code zum Festlegen, was beim Starten des Diensts ausgeführt wird:

    ' To access the OnStart in Visual Basic, select OnStart from the
    ' method name drop-down list. 
    Protected Overrides Sub OnStart(ByVal args() As String)
      EventLog1.WriteEntry("In OnStart")
    End Sub
    
        protected override void OnStart(string[] args)
        {
            eventLog1.WriteEntry("In OnStart");
        }
    

    Tipp

    Eine Dienstanwendung ist auf einen langen Ausführungszeitraum angelegt. Deshalb ruft sie in der Regel etwas im System ab oder überwacht etwas im System. Die Überwachung wird in der OnStart-Methode eingerichtet. Allerdings erfolgt die Überwachung jedoch nicht durch OnStart. Die OnStart-Methode muss zum Betriebssystem zurückkehren, sobald die Ausführung des Dienstes begonnen hat. Sie darf keine Endlosschleife oder Blöcke ausführen. Mit der System.Timers.Timer-Komponente können Sie einen einfachen Abrufmechanismus einrichten. In der OnStart-Methode würden Sie für die Komponente Parameter festlegen, und anschließend würden Sie die Enabled-Eigenschaft auf true festlegen. Der Zeitgeber würde dann regelmäßig zu der Zeit Ereignisse im Code auslösen, zu der der Dienst seine Überwachung ausführen könnte.

So legen Sie fest, was ausgeführt wird, wenn der Dienst beendet wurde

  • Wählen Sie im Code-Editor in der Dropdownliste Methodenname die OnStop-Prozedur. Sie wurde beim Erstellen des Projekts automatisch überschrieben. Schreiben Sie Code, um die Vorgehensweise beim Beenden des Diensts festzulegen.

    Protected Overrides Sub OnStop()
      EventLog1.WriteEntry("In OnStop.")
    End Sub
    
        protected override void OnStop()
        {
            eventLog1.WriteEntry("In onStop.");
        }
    

Sie können auch die Methoden OnPause, OnContinue und OnShutdown überschreiben, um zusätzliche Verarbeitungsschritte für die Komponente festzulegen.

So definieren Sie weitere Aktionen für den Dienst

  • Überschreiben Sie die betreffende Methode mit einer Methode, die festlegt, was ausgeführt werden soll.

    Im folgenden Code wird das Ergebnis nach dem Überschreiben der OnContinue-Methode veranschaulicht:

    Protected Overrides Sub OnContinue()
      EventLog1.WriteEntry("In OnContinue.")
    End Sub
    
        protected override void OnContinue()
        {
            eventLog1.WriteEntry("In OnContinue.");
        }  
    

Einige benutzerdefinierte Aktionen müssen beim Installieren des Windows-Diensts ausgeführt werden. Dies kann durch die Installer-Klasse erfolgen. Visual Studio kann diese Installationsprogramme speziell für einen Windows-Dienst erstellen und sie dem Projekt hinzufügen.

So erstellen Sie die Installationsprogramme für den Dienst

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf Service1.vb oder Service1.cs, und wählen Sie Ansicht-Designer.

  2. Klicken Sie auf den Hintergrund des Designers, um den Dienst selbst, nicht Elemente seines Inhalts, zu markieren.

  3. Klicken Sie mit der rechten Maustaste, wenn der Designer den Fokus hat, und klicken Sie dann auf Installer hinzufügen.

    Standardmäßig wird dem Projekt eine Komponentenklasse mit zwei Installationsprogrammen hinzugefügt. Die Komponente erhält den Namen ProjectInstaller; die darin enthaltenen Installationsprogramme sind zum einen das Installationsprogramm für den Dienst und zum andern das Installationsprogramm für den zugeordneten Prozess des Diensts.

  4. Klicken Sie in der Entwurfsansicht für ProjectInstaller auf ServiceInstaller1 oder serviceInstaller1.

  5. Vergewissern Sie sich, dass die ServiceName-Eigenschaft im Eigenschaftenfenster auf MyNewService festgelegt ist.

  6. Legen Sie die StartType-Eigenschaft auf Automatic fest.

  7. Klicken Sie im Designer auf ServiceProcessInstaller1 (für ein Visual Basic-Projekt) oder serviceProcessInstaller1 (für ein Visual C#-Projekt). Legen Sie die Account-Eigenschaft auf LocalSystem fest. Dadurch wird der Dienst installiert und auf einem lokalen Dienstkonto ausgeführt.

    SicherheitshinweisSicherheitshinweis

    Das Konto LocalSystem verfügt über ein breites Berechtigungsspektrum, einschließlich der Berechtigung zum Schreiben in das Ereignisprotokoll. Bei der Verwendung dieses Kontos ist allerdings Vorsicht geboten, da sich dadurch das Risiko von Malware-Angriffen erhöhen kann. Für andere Aufgaben sollten Sie das Konto LocalService verwenden, das auf dem lokalen Computer als Benutzer ohne Berechtigungen fungiert. Remoteservern werden anonyme Anmeldeinformationen übergeben.

So erstellen Sie ein Dienstprojekt

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt, und klicken Sie dann auf Eigenschaften. Der Eigenschaften-Designer des Projekts wird angezeigt.

  2. Klicken Sie auf der Anwendungsseite in der Liste Startobjekt auf MyNewService.

  3. Drücken Sie STRG+UMSCHALT+B, um das Projekt zu erstellen.

Da das Projekt nun erstellt ist, kann es bereitgestellt werden. Ein Setup-Projekt installiert die kompilierten Projektdateien und führt die Installationsprogramme aus, die zum Ausführen des Windows-Diensts erforderlich sind. Zum Erstellen eines vollständigen Setup-Projekts müssen Sie die Projektausgabe, MyNewService.exe, zum Setup-Projekt hinzufügen und dann eine benutzerdefinierte Aktion hinzufügen, um MyNewService.exe zu installieren. Weitere Informationen zu Setup-Projekten finden Sie unter Setup- und Bereitstellungsprojekte. Weitere Informationen zu benutzerdefinierten Aktionen finden Sie unter Exemplarische Vorgehensweise: Erstellen einer benutzerdefinierten Aktion.

So erstellen Sie ein Setup-Projekt für den Dienst

  1. Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf die Projektmappe, zeigen Sie auf Hinzufügen, und klicken Sie dann auf Neues Projekt.

  2. Erweitern Sie unter Installierte Vorlagen die Option Andere Projekttypen und anschließend Setup und Bereitstellung.

  3. Wählen Sie Visual Studio Installer aus.

  4. Wählen Sie im Bereich Vorlagen die Option Setup-Projekt aus. Nennen Sie das Projekt MyServiceSetup. Klicken Sie auf OK.

    Ein Setup-Projekt wird zur Projektmappe hinzugefügt.

Danach wird dem Setup-Projekt die Ausgabe des Windows-Dienstprojekts, MyNewService.exe, hinzugefügt.

So fügen Sie MyNewService.exe zum Setup-Projekt hinzu

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf MyServiceSetup, zeigen Sie auf Hinzufügen, und klicken Sie dann auf Projektausgabe.

    Das Dialogfeld Projektausgabegruppe hinzufügen wird angezeigt.

  2. MyNewService ist im Feld Projekt markiert.

  3. Wählen Sie in der Liste die Option Primäre Ausgabe aus, und klicken Sie auf OK.

    Ein Projektelement für die primäre Ausgabe von MyNewService wird zum Setup-Projekt hinzugefügt.

Jetzt können Sie eine benutzerdefinierte Aktion hinzufügen, um die Datei MyNewService.exe zu installieren.

So fügen Sie eine benutzerdefinierte Aktion zum Setup-Projekt hinzu

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Setup-Projekt, zeigen Sie auf Hinzufügen, und klicken Sie dann auf Benutzerdefinierte Aktionen.

    Der Editor für benutzerdefinierte Aktionen wird angezeigt.

  2. Klicken Sie im Editor für benutzerdefinierte Aktionen mit der rechten Maustaste auf den Knoten Benutzerdefinierte Aktionen, und klicken Sie auf Benutzerdefinierte Aktion hinzufügen.

    Das Dialogfeld Element im Projekt auswählen wird angezeigt.

  3. Doppelklicken Sie in der Liste auf Anwendungsordner, um ihn zu öffnen. Wählen Sie dann Primäre Ausgabe von MyNewService (Aktiv) aus, und klicken Sie auf OK.

    Die primäre Ausgabe wird zu allen vier Knoten der benutzerdefinierten Aktionen – Install, Commit, Rollback und Uninstall – hinzugefügt.

  4. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das MyServiceSetup-Projekt, und klicken Sie auf Erstellen.

So installieren Sie den Windows-Dienst

  1. Klicken Sie zum Installieren von MyNewService.exe mit der rechten Maustaste auf das Setup-Projekt im Projektmappen-Explorer, und wählen Sie Installieren.

  2. Folgen Sie den Anweisungen des Setup-Assistenten. Erstellen und speichern Sie die Projektmappe.

So starten und beenden Sie den Dienst

  1. Um den Dienststeuerungs-Manager in Windows 7, Windows Vista und Windows Server zu öffnen, klicken Sie mit der rechten Maustaste im Menü Start auf Computer und anschließend auf Verwalten. Erweitern Sie in der Konsole Computerverwaltung den Knoten Dienste und Anwendungen im linken Bereich. Klicken Sie auf Dienste.

    MyNewService müsste jetzt im Bereich Dienste des Fensters angezeigt werden.

  2. Wählen Sie den Dienst in der Liste aus, klicken Sie mit der rechten Maustaste darauf, und klicken Sie dann auf Starten.

  3. Klicken Sie mit der rechten Maustaste auf den Dienst, und klicken Sie dann auf Beenden.

So überprüfen Sie die Ereignisprotokollausgabe des Diensts

  1. Öffnen Sie den Server-Explorer, und greifen Sie auf den Knoten Ereignisprotokolle zu.

    Tipp

    Die Vorlage Windows-Dienst und die entsprechenden Funktionen stehen in der Standard Edition von Visual Studio nicht zur Verfügung.

  2. Suchen Sie die Liste für MyNewLog, und erweitern Sie sie. Es müssten die Einträge für die Aktionen zu sehen sein, die der Dienst ausgeführt hat.

So deinstallieren Sie einen Dienst

  • Öffnen Sie im Startmenü die Systemsteuerung, und klicken Sie auf Software. Suchen Sie anschließend den Dienst, und klicken Sie auf Deinstallieren.

Nächste Schritte

Sie können eine ServiceController-Komponente verwenden, um Befehle an den von Ihnen installierten Dienst zu senden.

Sie können ein Installationsprogramm verwenden, um ein Ereignisprotokoll während der Installation statt während der Ausführung der Anwendung zu erstellen. Außerdem wird das Ereignisprotokoll vom Installationsprogramm gelöscht, wenn die Anwendung deinstalliert wird.

Siehe auch

Aufgaben

Gewusst wie: Hinzufügen von Installern zur Dienstanwendung

Gewusst wie: Installieren und Deinstallieren von Diensten

Gewusst wie: Debuggen von Windows-Dienstanwendungen

Referenz

Gewusst wie: Zugreifen auf und Initialisieren von Server-Explorer/Datenbank-Explorer

Konzepte

Einführung in Windows-Dienstanwendungen

Weitere Ressourcen

Windows-Dienstanwendungen