[解決済み] ローカルコンピュータのWindowsサービスの開始と停止エラー
質問
通常、このエラーが発生します。 (ローカル コンピュータのサービス名" サービスが開始され、その後停止されました。いくつかのサービスは、他のサービスまたはプログラムによって使用されていない場合、自動的に停止します) 私のコードに何か問題がある場合、例えば存在しないドライブ パスなどがあります。Windows サービスは開始しません。
私は、サイズ制限に達した場合に、フォルダー/ファイルをある場所にバックアップする Windows サービスを持っています。詳細はすべて、Windows サービスが開始時に読み込む XML 構成によって提供されます。別のウィンドウズ・フォームに、ウィンドウズ・サービスの起動時に行うことをそのまま実行するボタンがあります。ウィンドウズサービスに入れる前にコードをデバッグするためにウィンドウズフォームを使用しています。
私のウィンドウズフォームを起動すると それは想定されたとおりのことをします。私のコードを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サービスを作成してインストーラーを構築しなければならないようです。この方法で、私はどこでエラーが発生したかを追跡することができます。
どのように解決するのですか?
サービスがこのように開始と停止を繰り返す場合、あなたのコードが未処理の例外を投げていることを意味します。 これはデバッグがかなり困難ですが、いくつかのオプションがあります。
- Windows の イベント ビューアー . 通常は、コンピュータ/サーバー マネージャーで イベント ビューアー -> Windows ログ -> アプリケーション . ここで何が例外をスローしたかを見ることができるので、役に立つかもしれませんが、スタックトレースは得られません。
- プログラムロジックをライブラリクラスのプロジェクトに抽出します。 コンソールアプリ(デバッグ用)とWindowsサービスの2つのバージョンを作成します。 (これは最初の努力が少し必要ですが、長い目で見れば多くの悩みを減らすことができます)。
- より多くの try/catch ブロックとログをアプリに追加して、何が起こっているかをよりよく把握します。
関連
-
[解決済み] EntityTypeにキーが定義されていないエラー
-
[解決済み】Visual Studio: 操作を完了できませんでした。パラメータが正しくありません
-
[解決済み】 C# 条件演算子エラー 代入、call、increment、decrement、await、new object 式のみ文として使用可能です。
-
[解決済み】画像のペイントにTextureBrushを使用する方法
-
[解決済み] Visual Studioで作成したWindowsサービスをインストールする
-
[解決済み] 指定されたサービスは削除するようにマークされています」エラーの解決方法
-
[解決済み] ファイルが存在しない場合、Windowsサービスをアンインストールするにはどうすればよいですか?
-
[解決済み] Windowsでサービスを削除するにはどうすればよいですか?
-
[解決済み] 実行ファイルからWindowsサービスを作成する
-
[解決済み] Windows コマンドプロンプトを使用して、Windows サービスをインストールしますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] [Entity Framework 4.1でエンティティに関連オブジェクトを追加する際に、エンティティオブジェクトをIEntityChangeTracker.の複数のインスタンスから参照できない。
-
[解決済み] 保護レベルによりアクセス不能になりました。
-
[解決済み】C# - パスに不正な文字がある場合
-
[解決済み】なぜこのコードはInvalidOperationExceptionを投げるのですか?
-
[解決済み】EF 5 Enable-Migrations : アセンブリにコンテキストタイプが見つかりませんでした
-
[解決済み】OnCollisionEnter2Dが実行されない?
-
[解決済み】5.7.57 SMTP - MAIL FROMエラー時に匿名メールを送信するためにクライアントが認証されない
-
[解決済み】WSACancelBlockingCallの例外について
-
[解決済み】IntPtrとは一体何なのか?
-
[解決済み】名前 'ViewBag' が現在のコンテキストに存在しない - Visual Studio 2015