Обычно я получаю такую ошибку: (Служба «имя службы» на локальном компьютере была запущена, а затем остановлена. Некоторые службы останавливаются автоматически, если они не используются другими службами или программами), когда что-то не так с моим кодом, например, несуществующий пути к диску и т. д. Служба Windows не запускается.
У меня есть служба Windows, которая выполняет резервное копирование папки / файлов в место, если оно достигло предельного размера. Все подробности предоставляются XML-конфигурацией, которую служба Windows читает при запуске. У меня есть отдельные формы Windows, в которых есть кнопка, которая делает именно то, что делает при запуске моей службы Windows. Я использую свои формы Windows для отладки кода перед тем, как поместить его в свою службу Windows.
Когда я запускаю свои окна. Он делает то, что должен делать. Когда я поместил свой код в метод OnStart () службы Windows, появилась ошибка.
Вот мой код:
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();
}
}
Я не знаю, что заставляет службу Windows не запускаться, симулятор формы Windows работал нормально. В чем проблема?
ОБНОВЛЕНИЕ: после многих испытаний я заметил, что при использовании только каталога папок (без файла) служба Windows не работает. Когда я заменил переменную fileWatch определенным файлом (включая его каталог), служба Windows запустилась. Когда я вернул его в папку, ничего не вышло. Я думаю, что расположение папок не работает в диспетчере файлов.
Когда я попытался создать новую службу Windows, которая следит за местоположением папки, она сработала .. Однако, когда я попробовал то же самое местоположение в исходной службе Windows, это не сработало! Я был наплевать! Кажется, что мне нужно создавать новую службу Windows и строить установщик каждый раз, когда я помещаю новый код / функцию. Таким образом я могу отслеживать, где я получаю ошибку.