Zwykle pojawia się ten błąd: (Usługa „nazwa usługi” na komputerze lokalnym została uruchomiona, a następnie zatrzymana. Niektóre usługi zatrzymują się automatycznie, jeśli nie są używane przez inną usługę lub programy), gdy coś jest nie tak z moim kodem, np. Nieistniejący ścieżki dysków itp. Usługa systemu Windows nie uruchamia się.
Mam usługę systemu Windows, która tworzy kopie zapasowe folderów / plików w lokalizacji, jeśli osiągnęła limit rozmiaru. Szczegóły są dostarczane przez konfigurację XML, którą usługa Windows odczytuje przy starcie. Mam osobne formularze Windows, które mają przycisk, który robi dokładnie to, co robi moja usługa Windows na starcie. Używam formularzy systemu Windows do debugowania kodu przed umieszczeniem go w mojej usłudze systemu Windows.
Kiedy uruchamiam formularze w systemie Windows. Robi to, co powinien. Kiedy umieściłem kod w metodzie OnStart () usługi Windows, pojawił się błąd.
Oto mój kod:
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();
}
}
Nie wiem, co sprawia, że usługa systemu Windows nie uruchamia się, symulator formularza systemu Windows działał dobrze. Co wydaje się być problemem?
AKTUALIZACJA: Po wielu próbach zauważyłem, że używając tylko katalogu folderów (bez pliku wyjściowego), usługa Windows nie działa. Kiedy zastąpiłem zmienną fileWatch określonym plikiem (łącznie z jego katalogiem), usługa systemu Windows została uruchomiona. Kiedy zmieniłem go z powrotem na lokalizację folderu, to nie zadziałało. Myślę, że lokalizacje folderów nie działają w programie do śledzenia plików.
Kiedy próbowałem utworzyć nową usługę systemu Windows, która obserwuje lokalizację folderu, zadziałało. Jednak gdy wypróbowałem tę samą lokalizację w mojej oryginalnej usłudze systemu Windows, nie zadziałało! Nie mogłem się doczekać $ # * ed! Wygląda na to, że muszę stworzyć nową usługę Windows i zbudować instalator za każdym razem, gdy umieszczam nowy kod / funkcję. W ten sposób mogę śledzić, gdzie pojawia się błąd.