Windows サービスの動作や生活そのものを過小評価することに問題があるかもしれません。
問題:
サービスが予期せず停止し、設定されているにもかかわらず回復アクションが実行されませんでした。ServiceHelper .ChangeStartMode メソッドの呼び出し後にサービスが停止しました
try
{
normalnekurwalogowanie(Constants.Values.service_name);
ServiceController svc = new ServiceController(Constants.Values.service_name);
if (svc != null)
{
ServiceHelper.ChangeStartMode(svc, (automatic ? ServiceStartMode.Automatic : ServiceStartMode.Manual));
svc.Close();
}
else
normalnekurwalogowanie("null");
}
catch (Exception ex)
{
//Logger.Instance.Error("Error message: {0}\nError Stack Trace: {1}", new object[] { ex.Message, ex.StackTrace });
normalnekurwalogowanie(ex.ToString());
}
私のログファイルにはエラーがありましたOpen Service Manager Error
:Unable to open Service Manager
ここで、興味深い事実がいくつかあります: - ご覧のとおり、例外がキャッチされてファイルに出力されましたが、サービスは停止しました - エラーは再起動後にのみ発生しました。サービスのインストール後、システムの再起動前には発生しません
ソリューション:
外部Logger
クラスへの参照を削除した後(私が書いたものではなく、コードがありません)、問題はなくなりました。どうしてか分かりません。
質問:
- キャッチされた例外がサービスをクラッシュさせるにはどうすればよいですか (そして、回復アクションが実行されない方法で)?
- 再起動後、コードのパフォーマンスはどのように変化しますか? それはまったく同じシーケンスを通過します。
外部クラスがコードに影響を与える可能性がある場合でも、例外をスローした行の前のどこにも呼び出されませんでした。ところで、winforms アプリで使用される externall クラスは正常に動作し、再起動前のサービスでは正常に動作します。
外部クラスのコードを取得して質問を更新してみます。