In diesem Artikel wird erläutert, wie Sie eine Anwendung von Grund auf neu erstellen, die mit Windows-Diensten funktioniert und Systemfehler in WinForm (C #) anzeigt.
Der Umriss dieses Artikels:
- Serviceerstellung
- Ereignisanzeige
- Service Code
- ĂśberprĂĽfen des Dienstes (Manuelles Starten des Dienstes)
- WinForm-Zuordnung
Serviceerstellung
Öffnen Sie Visual Studio. Nächste Datei → Neu → Projekt → (Windows Desktop) → Windows-Dienst (.Net Framework) → Ok.
Als nächstes müssen Sie ein Installationsprogramm erstellen. Klicken Sie im folgenden Fenster auf RMB und wählen Sie "Installationsprogramm hinzufügen". Sie haben "ProjectInstaller.cs [Design]" erstellt, danach müssen Sie zum "F7" -Code oder RMB "View Code" wechseln. Sie müssen die Zeile "InitializeComponent ();" suchen, den Cursor darauf setzen und "F12" drücken, dann müssen Sie die folgenden Zeilen hinzufügen:
this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem;
Sie mĂĽssen diese Zeilen jedoch nur in der folgenden Reihenfolge und an der folgenden Stelle hinzufĂĽgen. Andernfalls tritt bei der Installation des Dienstes ein Fehler auf.

Ereignisanzeige
Dies ist notwendig, um den korrekten Betrieb unseres Programms zu ĂĽberprĂĽfen.
Ereignisanzeige - Ein Programm zum Anzeigen des Ereignisprotokolls auf jedem Computer mit Windows. Jedes Programm, das auf einem Computer ausgeführt wird, veröffentlicht eine Benachrichtigung im Ereignisprotokoll, bevor es gestoppt wird. Jeder Zugriff auf das System, Sicherheitsänderungen, Optimierung des Betriebssystems, Hardwarefehler und Treiberfehler - all dies wird in das Ereignisprotokoll aufgenommen. Die Ereignisanzeige scannt Textprotokolldateien, kombiniert sie und platziert sie in der Benutzeroberfläche.
Wie öffne ich es? - Start → Ereignisanzeige (in der Suche) → „Ereignisprotokolle anzeigen“.
Weiter "Benutzerdefinierte Ansichten" → "Administrative Ereignisse". Hier sehen wir alle Fehler, Warnungen und Informationen dazu.
Es gibt drei Arten von Protokollen: Anwendung (Anwendung), System (System) und Sicherheit (Sicherheit). Wir brauchen nur ein System (System).
Service Code
Wir finden die CS-Datei mit dem Namen des Dienstes, ich habe es "Service1.cs", öffnen Sie es. Die Datei muss zwei überschriebene Methoden haben:
- OnStart (string [] args) - wird ausgefĂĽhrt, wenn der Dienst gestartet wird.
- OnStop () - wird ausgefĂĽhrt, wenn der Dienst gestoppt wird.
Es gibt noch einige weitere Methoden, die wir jetzt jedoch nicht benötigen. Sie können sie selbst finden.
Die Daten, die wir erhalten, werden in einer aktualisierten Textdatei gespeichert, also fĂĽgen wir hinzu
using System.IO;
FĂĽgen Sie den Code zur OnStart-Methode hinzu (string [] args):
EventLog myLog;
Als nächstes müssen Sie die Lösung "Lösung" -> "Lösung neu erstellen" sammeln. Nach erfolgreicher Montage können Sie den Vorgang überprüfen.
ĂśberprĂĽfen des Dienstes (Manuelles Starten des Dienstes)
Der Windows-Dienst kann nicht als reguläre Anwendung gestartet werden. Sie können nur als Administrator über die Befehlszeile ausgeführt werden.
FĂĽhren Sie die Befehlszeile als Administrator aus. Geben Sie die folgenden Befehle ein:
cd C:\Windows\Microsoft.NET\Framework\v4.0.30319 InstallUtil.exe \ .exe (InstallUtil.exe C:\Users\\source\repos\WindowsService1\WindowsService1 \bin\Debug\WindowsService1.exe) : InstallUtil.exe -u \ .exe
Drücken Sie anschließend die Win + R-Taste. Geben Sie "Services.msc" ein. Wir finden unseren Service in der Liste, klicken darauf und klicken auf "Start". Nach einem erfolgreichen Start wird unter dem im Code angegebenen Pfad eine Datei generiert, die eine Liste der Systemfehler enthält.
Vergessen Sie nicht, den Dienst nach der Überprüfung zu löschen.
WinForm-Zuordnung
Wenn Sie versuchen, in der Konsole anzuzeigen, können Sie Artikel finden, aber ich habe nicht gefunden, dass sie in WinForm angezeigt werden. Hier ist sie also. Standardmäßig wird ein Serviceprojekt vom Typ Anwendung erstellt. Um über die Konsole angezeigt zu werden, muss dieser Parameter in den Einstellungen geändert werden, damit WinForm ihn unverändert lässt. Als nächstes müssen Sie das Formular zum Projekt hinzufügen. "WindowsService1" → RMB → Hinzufügen → Windows Form → Hinzufügen. Und machen Sie das folgende Design. Ändern Sie als Nächstes die Datei "Program.cs".
HinzufĂĽgen mit:
using System.Windows.Forms; using System.Security.Principal; using System.ComponentModel; using System.Diagnostics;
Und ändern Sie die Hauptmethode:
static void Main(string[] args) { WindowsPrincipal windowsPricipal = new WindowsPrincipal(WindowsIdentity.GetCurrent()); bool hasAdministrativeRight = windowsPricipal.IsInRole(WindowsBuiltInRole.Administrator); if (hasAdministrativeRight == false)
Fügen Sie eine neue Klasse "SystemError" hinzu. ("WindowsService1" -> RMB -> Hinzufügen -> Klasse -> Hinzufügen). Hier speichern wir Fehlerdaten. Ändern Sie es:
public string EntryType{ get; set; } public string EventLog{ get; set; } public string MachineName { get; set; } public string AppName { get; set; } public string Message { get; set; } public string TimeWritten { get; set; }
Weiter in "Service1.cs" fĂĽgen wir die Methode "RunFromForm (string [] args)" hinzu, die den Dienst startet.
public void RunFromForm(string[] args) { OnStart(args); OnStop(); }
FĂĽgen Sie eine neue Klasse "GetListErrors" hinzu. ("WindowsService1" -> RMB -> HinzufĂĽgen -> Klasse -> HinzufĂĽgen). Hier erhalten wir die Daten aus der Datei. HinzufĂĽgen mit:
using System.IO;
Ändern Sie es:
string filepath = AppDomain.CurrentDomain.BaseDirectory + @"\ServiceLog.txt"; SystemError systemError; public List<SystemError> listSysErrs; public void ReadFile()
Ändern Sie als Nächstes den Code des Formulars "Form1.cs". Hinzufügen mit:
using System.ServiceProcess; using System.Diagnostics;
Ändern Sie es:
Service1 service = new Service1(); List<SystemError> listSysErrs; string[] args; public Form1(string[] args) { InitializeComponent(); this.args = args; if (Environment.UserInteractive)
Jetzt können Sie den Dienst als reguläre Anwendung starten. Das Ergebnis ist wie folgt:
