Зазвичай я отримую цю помилку: (Служба "Ім'я служби" на локальному комп’ютері запускається і потім припиняється. Деякі служби припиняються автоматично, якщо інша служба або програми не використовуються), коли в моєму коді щось не так, наприклад, не існує доріжки та ін. Служба Windows не запуститься.
У мене є служба Windows, яка створює резервну копію папок / файлів до місця, якщо вона досягла обмеження розміру. Детальну інформацію надає Конфігурація XML, яку служба Windows читає при запуску. У мене є окремі форми Windows, у яких є кнопка, яка робить саме те, що робить моя служба Windows. Я використовую свої форми Windows для налагодження коду, перш ніж помістити його в службу Windows.
Коли я запускаю вікна форми. Це робить те, що він повинен робити. Коли я поміщав свій код у метод Windows Service OnStart (), виявилася помилка.
Ось мій код:
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, це не вийшло! Я був mindf $ # * ed! Здається, що мені потрібно створити нову службу Windows та створити інсталятор щоразу, коли я розміщую новий код / функцію. Таким чином я можу відстежувати, де я отримую помилку.