Обычно я получаю эту ошибку: (Служба "имя службы" на локальном компьютере началась, а затем остановлена. Некоторые службы автоматически останавливаются, если они не используются другой службой или программами), когда что-то не так с моим кодом, например, с несуществующими дорожками дисков и т.д. Окна служба не запускается.
У меня есть служба Windows, которая выполняет резервное копирование папки/файлов, до местоположения, если она достигает предела размера. Все детали предоставляют конфигурацию XML, которую служба Windows читает при запуске. У меня есть отдельные формы окон, в которых есть кнопка, которая делает то же самое, что делает моя служба windows onstart. Я использую свои формы окон для отладки кода, прежде чем поместить его в свою службу 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 не запускаться, симулятор оконных окон отлично работал. Какая проблема?
UPDATE: После многих испытаний я заметил, что с использованием только папки (w/out file) служба Windows не работает. Когда я заменил переменную fileWatch конкретным файлом (включая его каталог), запустилась служба Windows. Когда я вернул его в папку, это не сработало. Я думаю, что расположение папок не работает в файловой машине.
Когда я попытался создать новую службу Windows, которая следит за расположением папки, она сработала. Однако, когда я пробовал то же место в моей первоначальной службе Windows, это не сработало! Я был mindf $# * ed! Кажется, что мне нужно создать новую службу Windows и построить установщик каждый раз, когда я помещаю новый код/функцию. Таким образом, я могу отслеживать, где я получаю сообщение об ошибке.