通常、このエラーが発生します: (ローカル コンピューターの "サービス名" サービスが開始されてから停止しました。他のサービスまたはプログラムで使用されていない場合、一部のサービスは自動的に停止します) 存在しないなど、コードに何か問題がある場合ドライブ パスなど。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 サービスが開始されました。フォルダーの場所に戻すと、機能しませんでした。私が思うに、フォルダーの場所はファイルウォッチャーでは機能しません。
フォルダーの場所を監視する新しい Windows サービスを作成しようとすると、うまくいきました。ただし、元の Windows サービスで同じ場所を試してみると、うまくいきませんでした。私は気にしていました!新しいコード/関数を配置するたびに、新しい Windows サービスを作成してインストーラーをビルドする必要があるようです。このようにして、エラーが発生した場所を追跡できます。