通常、次のエラーが表示されます:(ローカルコンピュータの「サービス名」サービスが開始されてから停止されました。他のサービスまたはプログラムで使用されていない場合、一部のサービスは自動的に停止します)存在しないなど、コードに問題がある場合ドライブパスなど。Windowsサービスは開始されません。
サイズ制限に達した場合に、フォルダ/ファイルを特定の場所にバックアップするWindowsサービスがあります。詳細はすべて、Windowsサービスが起動時に読み取るXML構成によって提供されます。私は、Windowsサービスのonstartが実行していることを正確に実行するボタンを持つ、別のWindowsフォームを持っています。私は自分のWindowsサービスに配置する前に、Windowsフォームを使用してコードをデバッグします。
Windowsフォームを起動すると、それはそれがすることを想定していることをします。コードをWindowsサービスの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サービスが開始しました。フォルダーの場所に戻したところ、機能しませんでした。私が思うに、フォルダの場所はfilewatcherでは機能しません。
フォルダーの場所を監視する新しいWindowsサービスを作成しようとしたところ、うまくいきました。しかし、元のWindowsサービスで同じ場所を試しましたが、うまくいきませんでした。私は気をつけていました$#* ed!新しいコード/関数を配置するたびに、新しいWindowsサービスを作成してインストーラーをビルドする必要があるようです。このようにして、エラーが発生した場所を追跡できます。