Share via


Exemplarische Vorgehensweise: Erstellen einer Windows-Dienstanwendung im Komponenten-Designer mit Hilfe von Visual J#

In den Prozeduren dieses Themas wird schrittweise beschrieben, wie Sie eine einfache Windows-Dienstanwendung erstellen können, die Meldungen in ein Ereignisprotokoll schreibt. Folgende grundlegende Schritte müssen ausgeführt werden, um den Dienst erstellen und verwenden zu können:

  • Erstellen Sie ein Projekt mit der Vorlage für die Windows-Dienstanwendung. Diese Vorlage erstellt eine Klasse, die von ServiceBase erbt, und erstellt einen Großteil des Basisdienstcodes, z. B. den Code zum Starten des Dienstes.
  • Schreiben Sie den 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 der zugeordneten Dienste, den das Projekt enthält.
  • Erstellen Sie das Projekt.
  • Erstellen Sie ein Setup-Projekt zur Installation des Dienstes, und installieren Sie den Dienst anschließend.
  • Öffnen Sie den Dienststeuerelement-Manager von Windows 2000, und starten Sie den Dienst.

Zunächst erstellen Sie das Projekt und legen die Werte fest, die für das ordnungsgemäße Funktionieren des Dienstes erforderlich sind.

So erstellen und konfigurieren Sie einen Dienst

  1. Zeigen Sie im Menü Datei auf Neu, und klicken Sie dann auf Projekt.

    Das Dialogfeld Neues Projekt wird angezeigt.

  2. Wählen Sie das Projekt Windows-Dienst aus der Liste der Projektvorlagen für Visual J# aus, und nennen Sie es MyNewService.

    Hinweis   Die Projektvorlage fügt automatisch eine Komponentenklasse mit dem Namen Service1 hinzu, die von System.ServiceProcess.ServiceBase erbt.

  3. Klicken Sie auf den Designer. Legen Sie anschließend im Eigenschaftenfenster MyNewService für die ServiceName-Eigenschaft von Service1 fest.

  4. Legen Sie für die Name-Eigenschaft MyNewService fest.

  5. Legen Sie True für die AutoLog-Eigenschaft fest.

  6. Bearbeiten Sie im Code-Editor die Main-Methode so, dass eine Instanz von MyNewService erstellt wird. Als Sie den Dienst in Schritt 4 umbenannt haben, wurde der Klassenname in der Main-Methode nicht verändert.

    // Visual J#
    public static void main(String[] args)
    {
       System.ServiceProcess.ServiceBase[] ServicesToRun;
       ServicesToRun = new System.ServiceProcess.ServiceBase[] 
          { new MyNewService() };
       System.ServiceProcess.ServiceBase.Run(ServicesToRun);
    }
    

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 den Typ der Komponenten verwendet, die Sie einem Windows-Dienst hinzufügen könnten. Weitere Informationen zu benutzerdefinierten Ereignisprotokollen finden Sie unter Erstellen und Entfernen von benutzerdefinierten Ereignisprotokollen.

So fügen Sie dem Dienst eine benutzerdefinierte Ereignisprotokollfunktion hinzu

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf Service1.jsl, und wählen Sie Designer anzeigen aus.

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

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

  4. Bearbeiten Sie den Konstruktor, um ein benutzerdefiniertes Ereignisprotokoll zu definieren:

    // Visual J#
    public MyNewService()
    {
       InitializeComponent();
       if (!System.Diagnostics.EventLog.SourceExists("MySource")) {
       System.Diagnostics.EventLog.CreateEventSource(
          "MySource","MyNewLog");
       }
       eventLog1.set_Source("MySource");
       eventLog1.set_Log("MyNewLog");
    }
    

So definieren Sie die Vorgehensweise beim Starten des Dienstes

  • Suchen Sie im Code-Editor die OnStart-Methode, die beim Erstellen des Projekts automatisch überschrieben wurde, und schreiben Sie Code, der festlegt, was beim Starten des Dienstes geschieht:

    // Visual J#
    protected void OnStart(String[] args)
    {
       eventLog1.WriteEntry("In OnStart");
    }
    

    **Hinweis   **Eine Dienstanwendung ist auf einen langen Ausführungszeitraum angelegt. Als solche ruft sie regelmäßig etwas im System ab oder überwacht etwas im System. Die Überwachung wird in der OnStart-Methode eingerichtet. Allerdings erfolgt die Überwachung nicht eigentlich durch OnStart. Die OnStart-Methode muss zum Betriebssystem zurückkehren, sobald der Dienst ausgeführt wird. 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 Parameter für die Komponente festlegen und für die Timer.Enabled-Eigenschaft anschließend 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 definieren Sie die Vorgehensweise beim Stoppen des Dienstes

  • Suchen Sie im Code-Editor die OnStop-Prozedur, die beim Erstellen des Projekts automatisch überschrieben wurde, und schreiben Sie Code, der festlegt, was beim Stoppen des Dienstes geschieht:

    // Visual J#
    protected void OnStop()
    {
       eventLog1.WriteEntry("In onStop."); 
    }
    

Sie können auch die Methoden OnPause, OnContinue und OnShutdown überschreiben, um eine weitere Verarbeitung für die Komponente zu definieren.

So definieren Sie weitere Aktionen für den Dienst

  • Überschreiben Sie die betreffende Methode für die zu bearbeitende Methode und definieren Sie, was geschehen soll.

    Der folgende Code zeigt das Ergebnis nach dem Überschreiben der OnContinue-Methode:

    // Visual J#
    protected void OnContinue()
    {
       eventLog1.WriteEntry("In OnContinue.");
    }  
    

Manche benutzerdefinierten Aktionen müssen beim Installieren des Windows-Dienstes 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. Wechseln Sie zur Entwurfsansicht für Service1.

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

  3. Klicken Sie im Eigenschaftenfenster auf den Link Installer hinzufügen im grauen Bereich unter der Liste der Eigenschaften.

    Standardmäßig wird eine Komponentenklasse mit zwei Installationsprogrammen zum Projekt 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 Dienstes.

  4. Rufen Sie die Entwurfsansicht für ProjectInstaller auf, und klicken Sie auf ServiceInstaller1.

  5. Legen Sie im Eigenschaftenfenster MyNewService für die ServiceName-Eigenschaft fest (falls erforderlich).

  6. Legen Sie für die StartType-Eigenschaft Automatic fest

So erstellen Sie ein Dienstprojekt

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt, und klicken Sie dann im Kontextmenü auf Eigenschaften. Das Dialogfeld Eigenschaftenseiten des Projekts wird geöffnet.
  2. Klicken Sie im linken Bereich auf die Registerkarte Allgemein des Ordners Allgemeine Eigenschaften.
  3. Wählen Sie in der Liste Startobjekt den Eintrag MyNewService.MyNewService aus. Klicken Sie auf OK.
  4. Drücken Sie STRG+UMSCHALT+B, um das Projekt zu erstellen.

Da das Projekt nun erstellt ist, kann es weitergegeben werden. Ein Setup-Projekt installiert die kompilierten Projektdateien und führt die Installationsprogramme aus, die zum Ausführen des Windows-Dienstes 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-Projekte. 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. Zeigen Sie im Menü Datei auf Projekt hinzufügen, und wählen Sie dann Neues Projekt.

  2. Wählen Sie im Bereich Projekttypen den Ordner Setup- und Weitergabeprojekte aus.

  3. Wählen Sie im Bereich Vorlagen die Option Setup-Projekt aus. Nennen Sie das Projekt MyServiceSetup.

    Ein Setup-Projekt wird zur Projektmappe hinzugefügt. Danach wird die Ausgabe des Windows-Dienstprojekts, MyNewService.exe, zum Setup-Projekt 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 wählen Sie dann Projektausgabe.

    Das Dialogfeld Projektausgabegruppe hinzufügen wird angezeigt.

  2. MyNewService ist im Feld Projekt markiert.

  3. Wählen Sie aus dem Listenfeld 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 Ansicht, und wählen Sie dann 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 wählen Sie Benutzerdefinierte Aktion hinzufügen.

    Das Dialogfeld Element im Projekt auswählen wird angezeigt.

  3. Doppelklicken Sie im Listenfeld 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. Erstellen Sie das Setup-Projekt.

So installieren Sie den Windows-Dienst

  • Wechseln Sie in das Verzeichnis, in dem das Setup-Projekt gespeichert wurde, und führen Sie die MSI-Datei aus, um MyNewService.exe zu installieren.

    Hinweis   Möglicherweise müssen Sie im Dialogfeld Dienstanmeldung festlegen sowohl einen Domänennamen als auch einen Benutzernamen (z. B. MyDomain\MyAlias) eingeben.

So starten und stoppen Sie den Dienst

  1. Öffnen Sie den Dienststeuerelement-Manager, indem Sie einen der folgenden Schritte ausführen:

    • Klicken Sie in Windows 2000 Professional auf dem Desktop des Computers mit der rechten Maustaste auf Arbeitsplatz und dann auf Verwalten. Erweitern Sie in der Konsole Computerverwaltung den Knoten Dienste und Anwendungen.

      - or -

    • Klicken Sie in Windows 2000 Server auf Start, zeigen Sie auf Programme, klicken Sie auf Administratortools und anschließend auf Dienste.

      **Hinweis   **In Windows NT, Version 4.0, kann das Dialogfeld über die Systemsteuerung geöffnet werden.

    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 Dienstes

  1. Öffnen Sie den Server-Explorer, und greifen Sie auf den Knoten Ereignisprotokolle zu. Weitere Informationen hierzu finden Sie unter Arbeiten mit Ereignisprotokollen im Server-Explorer.
  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 Menü Start die Systemsteuerung, und klicken Sie auf Software; suchen Sie anschließend den Dienst, und klicken Sie auf Deinstallieren.
  • Sie können das Programm auch deinstallieren, indem Sie mit der rechten Maustaste auf das Programmsymbol für die MSI-Datei klicken und Deinstallieren auswählen.

Nächste Schritte

Sie könnten auch mit einer ServiceController-Komponente arbeiten, mit der Sie Befehle an den von Ihnen installierten Dienst senden können. Weitere Informationen zum Verwenden der ServiceController-Komponente finden Sie unter Überwachen von Windows-Diensten.

Siehe auch

Windows-Dienstanwendungen | Einführung in Windows-Dienstanwendungen | Hinzufügen von Installationsprogrammen zu Dienstanwendungen | Installieren und Deinstallieren von Diensten | Debuggen von Windows-Dienstanwendungen | Starten des Ereignis-Viewers | Zugreifen auf den und Initialisieren des Server-Explorers | Exemplarische Vorgehensweisen für Windows Forms