通常、このエラーが発生します: (ローカルコンピュータの「サービス名」サービスが開始され、停止しました。私のコードに何か問題がある場合(存在しないドライブパスなど)、Windowsサービスは起動しません。ローカルコンピュータ上のWindowsサービスが起動して停止したエラー
私は、フォルダ/ファイルをサイズ制限に達した場所にバックアップする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サービスは機能しません。 fileWatch変数を特定のファイル(そのディレクトリを含む)に置き換えると、Windowsサービスが開始されました。私がそれをフォルダの場所に戻したとき、それはうまくいかなかった。私が考えているのは、ファイルウォッチャーではフォルダの場所が機能しないということです。
フォルダの場所を監視する新しいWindowsサービスを作成しようとしましたが、正常に機能しました。ただし、元のWindowsサービスで同じ場所を試しても機能しませんでした。私は心配していました。私は新しいWindowsサービスを作成し、新しいコード/関数を配置するたびにインストーラをビルドする必要があるようです。この方法で、どこでエラーが発生するのかを追跡できます。
ありがとうございました! "System.ArgumentException:パスが正当な形式ではありません。System.IO.Path.NormalizePath(String path、Boolean fullCheck、Int32 maxPathLength)の システム内の のシステムでエラーが発生しました。 .IO.Path.GetFullPathInternal(String path) at System.IO.Path。System.ServiceProcess.ServiceBaseでGetFullPath(文字列のパス)System.IO.FileSystemWatcher.StartRaisingEventsで ()System.IO.FileSystemWatcher.set_EnableRaisingEvents(ブール値)で LogBackupWinSvc.Service1.OnStart(文字列[]引数)で 。 ServiceQueuedMainCallback(オブジェクト状態) " – Blackator
Windowsイベントビューアは完全なスタックトレースを表示し、非常に有用なツールです。 –