Normalerweise erhalte ich folgende Fehlermeldung: (Der Dienst "Dienstname" auf dem lokalen Computer wurde gestartet und dann gestoppt. Einige Dienste werden automatisch beendet, wenn sie nicht von anderen Diensten oder Programmen verwendet werden.) Wenn mit meinem Code etwas nicht stimmt, z. B. nicht vorhanden Laufwerkspfade usw. Der Windows-Dienst wird nicht gestartet.
Ich habe einen Windows-Dienst, der Ordner / Dateien an einem Speicherort sichert, wenn die Größenbeschränkung erreicht ist. Details werden alle von einer XML-Konfiguration bereitgestellt, die der Windows-Dienst beim Start liest. Ich habe ein separates Windows-Formular mit einer Schaltfläche, die genau das tut, was der Start meines Windows-Dienstes tut. Ich verwende meine Windows-Formulare zum Debuggen des Codes, bevor ich ihn in meinen Windows-Dienst einfüge.
Wenn ich meine Windows Forms starte. Es tut, was es zu tun vermutet. Als ich meinen Code in die OnStart () -Methode des Windows-Dienstes einfügte, wurde der Fehler angezeigt.
Hier ist mein Code:
protected override void OnStart(string[] args)
{
private static string backupConfig = @"D:\LogBackupConfig\backupconfig.xml";
private static string serviceStat = @"D:\LogBackupConfig\Status.txt";
private static string fileFolderStat = @"D:\LogBackupConfig\FileFolderStat.txt";
protected override void OnStart(string[] args)
{
if (File.Exists(backupConfig))
{
FileSystemWatcher watcher = new FileSystemWatcher();
XmlTextReader reader = new XmlTextReader(backupConfig);
XmlNodeType type;
List<string> listFile = new List<string>();
string fileWatch = "";
//this loop is for reading XML elements and assigning to variables
while (reader.Read())
{
type = reader.NodeType;
if (type == XmlNodeType.Element)
{
if (reader.Name == "File")
{
reader.Read();
fileWatch = reader.Value;
}
else if (reader.Name == "Folder")
{
reader.Read();
fileWatch = reader.Value;
}
}
}
reader.Close();
watcher.Path = fileWatch;
watcher.Filter = "*.*";
//this loop reads whether the service will watch a file/folder
XmlTextReader reader1 = new XmlTextReader(backupConfig);
while (reader1.Read())
{
type = reader1.NodeType;
if (type == XmlNodeType.Element)
{
if (reader1.Name == "File")
{
watcher.IncludeSubdirectories = false;
watcher.Changed += new FileSystemEventHandler(OnChangedFile);
}
else if (reader1.Name == "Folder")
{
watcher.IncludeSubdirectories = true;
watcher.Changed += new FileSystemEventHandler(OnChangedFolder);
}
}
}
reader1.Close();
watcher.EnableRaisingEvents = true;
}
else
{
StreamWriter sw = new StreamWriter(serviceStat, true);
sw.WriteLine("File not found. Please start the Log Backup UI first.");
sw.Close();
}
}
Ich weiß nicht, was den Windows-Dienst davon abhält, nicht zu starten. Der Windows Form Simulator hat einwandfrei funktioniert. Was scheint das Problem zu sein?
UPDATE: Nach vielen Versuchen habe ich festgestellt, dass der Windows-Dienst nicht funktioniert, wenn nur ein Ordnerverzeichnis (ohne Datei) verwendet wird. Als ich die Variable fileWatch durch eine bestimmte Datei (einschließlich ihres Verzeichnisses) ersetzte, wurde der Windows-Dienst gestartet. Als ich es wieder in einen Ordner geändert habe, hat es nicht funktioniert. Was ich denke ist, dass Ordnerpositionen in einem Filewatcher nicht funktionieren.
Als ich versuchte, einen neuen Windows-Dienst zu erstellen, der einen Ordnerspeicherort überwacht, funktionierte dies. Als ich jedoch denselben Speicherort in meinem ursprünglichen Windows-Dienst ausprobierte, funktionierte dies nicht! Ich war verrückt nach $ # * ed! Es scheint, dass ich jedes Mal, wenn ich einen neuen Code / eine neue Funktion platziere, einen neuen Windows-Dienst erstellen und das Installationsprogramm erstellen muss. Auf diese Weise kann ich verfolgen, wo ich einen Fehler erhalte.