/// <summary> /// 前回失敗したサービスを再実行する /// </summary> private static void DoErrServicerRestartSc() { if (lstServiceErr != null && lstServiceErr.Count > 0) { _logger.Debug("***DoErrServicerRestartSc START***"); WindowsServiceHelper windowsService = null; int iErrServiceResFre = 0; // 入力パラメータからサービス再実行回数を取得する int iErrServiceResFreMax = int.Parse(ConfigurationManager.AppSettings["ErrServiceResFrequency"]); // 入力パラメータからサービス再実行時間間隔を取得する int iErrServiceResInterval = int.Parse(ConfigurationManager.AppSettings["ErrServiceResInterval"]); System.Threading.Thread.Sleep(iErrServiceResInterval * 60 * 1000); // 入力パラメータからサービス起動タイプを取得する string strProStartupType = ConfigurationManager.AppSettings["ProgramStartupType"]; try { foreach (ServerConfigElement serviceElem in lstServiceErr) { for (iErrServiceResFre = 0; iErrServiceResFre < iErrServiceResFreMax; iErrServiceResFre++) { try { //WindowsServiceHelperオブジェクトを作成 windowsService = new WindowsServiceHelper(serviceElem.ServerAddress, serviceElem.User, serviceElem.Password, serviceElem.ServiceErrNm, serviceElem.ServiceInterval, strProStartupType); // サーバ再起動を実行する windowsService.ExeStartService(); // ログ出力 _logger.Info("服務器:" + serviceElem.ServerAddress + "的" + serviceElem.ServiceErrNm + @"服務再次被重啟!"); // 正常で起動される場合、対応するサービスを削除する lstServiceErr.Remove(serviceElem); // 次のセービスを進む continue; } catch (RestartSrException rsException) { // ログ出力 string msg = rsException.Message + " : " + rsException.InnerException.Message; _logger.Error("服務器:" + serviceElem.ServerAddress + "的" + serviceElem.ServiceErrNm + @"服務再次啟動失败!(" + Convert.ToString(iErrServiceResFre + 1) + "回) 錯誤信息如下所示:" + Environment.NewLine + msg); } catch (Exception) { throw; } } } _logger.Debug("***DoErrServicerRestartSc END***"); } catch (Exception) { _logger.Debug("***DoErrServicerRestartSc ERR***"); throw; } } }
/// <summary> /// サーバ再起動する時、指定batファイルを呼び出す /// </summary> private static void ExecuteBatFileSc() { _logger.Debug("***ExecuteBatFileSc START***"); WindowsServiceHelper windowsService = null; try { // 独自に定義したセクション ServerSection serSection = ConfigurationManager.GetSection("server.serversection") as ServerSection; // 入力パラメータからサービス起動タイプを取得する string strProStartupType = ConfigurationManager.AppSettings["ProgramStartupType"]; if (serSection != null) { // 指定検索内容情報リスト初期化 lstServiceErr = new List <ServerConfigElement>(); foreach (ServerConfigElement elem in serSection.ServerElements) { foreach (String serviceNm in elem.ServiceNm.Split(',')) { try { //WindowsServiceHelperオブジェクトを作成 windowsService = new WindowsServiceHelper(elem.ServerAddress, elem.User, elem.Password, serviceNm, elem.ServiceInterval, strProStartupType); // サーバ再起動を実行する windowsService.ExeStartService(); // ログ出力 _logger.Info("服務器:" + elem.ServerAddress + "的" + serviceNm + @"服務已經被重啟!"); } catch (RestartSrException rsException) { if (rsException.ExceptionCd == RestartSrException.ExceptionCode.Err_97) { // ログ出力 string msg = rsException.Message + " : " + rsException.InnerException.Message; _logger.Error("服務器:" + elem.ServerAddress + @"連接錯誤!" + "錯誤信息如下所示:" + Environment.NewLine + msg); break; } else if (rsException.ExceptionCd == RestartSrException.ExceptionCode.Err_98) { // ログ出力 _logger.Error(@"指定IP:" + elem.ServerAddress + "下對應服务【" + serviceNm + "】不存在!"); continue; } else { // エラーの場合、エラーサービスをリストに設定する lstServiceErr.Add(CloneSerConfigItem(elem, serviceNm)); // ログ出力 _logger.Error("服務器:" + elem.ServerAddress + "的" + serviceNm + @"服務啟動錯誤!"); } } catch (Exception) { throw; } } } } _logger.Debug("***ExecuteBatFileSc END***"); } catch (Exception) { _logger.Debug("***ExecuteBatFileSc ERR***"); throw; } }