- PR -

サービス起動時のエラー

1
投稿者投稿内容
未記入
大ベテラン
会議室デビュー日: 2008/07/11
投稿数: 182
投稿日時: 2008-08-07 17:55
こんにちは、C#初心者です。

WinXP SP3
VS 2008 C#
.NET Framework 2.0
で作成してます。

サーバアプリのプログラムでビルド後、プロセスのアタッチでデバッグしてます。
サービスに登録されたプログラムのサービス開始と選ぶと
「エラー1053: そのサービスは指定時間内に開始要求または制御要求に応答しませんでした。」
と起動できません。

VSが感知し、デバッグプログラムが開き、どうやらログ出力クラスで初期化に失敗しているようでした。

public static class Log {

public static object lockObject = new object();

public static string LogDir = "";

public static void Write(string text) {
if (Properties.Settings.Default.LogMode.ToLower() != "on") {//←ここ!
return;
}
WriteImpl(text);
}

private static void WriteImpl(string text) {
lock (Log.lockObject) {
string LogFileName = System.IO.Path.Combine(Log.LogDir , DateTime.Now.ToString("yyyyMMdd") + ".log");
StreamWriter sw = null;
while (true) {
try {
sw = new StreamWriter(new FileStream(LogFileName , FileMode.Append , FileAccess.Write , FileShare.ReadWrite));
break;
} catch (IOException) {
//Thread.Sleep(100);
break;
} catch (Exception e) {
throw e;
}
}
sw.WriteLine(DateTime.Now.ToString() + "(" + Thread.CurrentThread.ManagedThreadId + "): " + text);
sw.Close();
}
}

エラー内容から、nullの場合のロジックも書かないとExceptionで捕まえられませんよ。とのエラーと判断し、
Properties.Settings.Default.LogMode.ToLower()
をtry catchで捕まえたり、stringで取得しようとしましたが、同じエラーでサービスを起動できないままです。

何から手を付けて良いか分からず、アドバイスよろしくお願いします。

ちなみにここは設定ファイルの値を取得していると思うのですが、ちゃんと値はセットされてます。
<setting name="LogMode" serializeAs="String">
<value>on</value>
</setting>


また、以前もこのようにソースを代えてリビルドをし、サービスを起動しようとしたら同じようにエラーになりました。所が数時間たって再びサービスを起動したら何事も無く実行されました・・。

[ メッセージ編集済み 編集者: 未記入 編集日時 2008-08-07 17:57 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-08-08 10:46
引用:

未記入さんの書き込み (2008-08-07 17:55) より:

「エラー1053: そのサービスは指定時間内に開始要求または制御要求に応答しませんでした。」


このエラー内容から、

引用:

エラー内容から、nullの場合のロジックも書かないとExceptionで捕まえられませんよ。とのエラーと判断し、


どうしてこの判断になったのでしょうか? どれが null か検証したのでしょうか?

引用:

をtry catchで捕まえたり、stringで取得しようとしましたが、同じエラーでサービスを起動できないままです。


null であれば System.String で ToLower メソッドは実行できません。

if (Properties.Settings.Default.LogMode == null) {
  // null の時の処理
}

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
CHX99
会議室デビュー日: 2007/05/18
投稿数: 12
投稿日時: 2008-08-08 13:02
このエラー、ServiceBase.OnStartメソッドが規定時間内に終了しなかった場合に発生します。規定時間は確か30秒位だったと思いますが、うろおぼえです、あしからず。

まずはServiceBase.OnStartで呼び出している処理の中で、どこに時間が掛かっているのか調査してはいかがでしょうか?
イベントログかファイルに、
処理1開始:XX年XX月XX日 XX時XX分XX秒XXX
処理2開始:XX年XX月XX日 XX時XX分XX秒XXX
...
みたいな感じで出力すれば、遅い処理は特定できると思います。

対策はケースバイケースですが、遅い処理をどうしてもOnStartで実施する必要があるなら、別スレッドで実施して、スレッドで例外になったらプロセスを終了する必要があるかもしれませんね。
1

スキルアップ/キャリアアップ(JOB@IT)