Проблема с тем, что служба Windows не перезапускается с использованием C#,C#

Место общения программистов C#
Ответить
Anonymous
 Проблема с тем, что служба Windows не перезапускается с использованием C#,

Сообщение Anonymous »

Привет всем!

**Я устанавливаю эту службу на Windows Server 2019 (только подумал упомянуть об этом 🤷‍♂️).
У меня есть служба Windows, которая должна перезапуститься через определенное время с помощью метода ServiceRestartTimer.
Проблема, с которой я столкнулся м лицом:

Когда служба достигает состояния Stop, кажется, что она полностью останавливается, а остальная часть кода больше не выполняется.
*На основании журналов, которые я Я добавил, я понял, что это происходит.
Это мой код:

Код: Выделить всё

if (AppConfiguration.RestartTimeMin != 0)
{
RestartTimeer.Elapsed += ServiceRestartTimer;
RestartTimeer.Start();
}
В этом разделе, который запускается после метода OnStart , я вызываю ServiceRestartTimer >метод, который переходит к следующему методу:

Код: Выделить всё

private void ServiceRestartTimer(object sender, ElapsedEventArgs e)
{
try
{
DateTime now = DateTime.Now;
TimeSpan diff = now - LatestReadTime;

Log.WriteToFile("Service Entered ServiceRestartTimer at: " + now.ToString());

// Checking if the delay exceeds the allowed time
if (diff.TotalSeconds > RestartTimeInSec)
{
Ping myPing = new Ping();

// Executing Ping asynchronously
myPing.PingCompleted += (pingSender, pingEventArgs) =>
{
try
{
PingReply reply = pingEventArgs.Reply;

if (reply.Status == IPStatus.Success)
{
Log.WriteToFile("ReStart Service Is Called: " + " In Time : " + DateTime.Now.ToString());

try
{
// Using ServiceController to control the service
ServiceController sc = new ServiceController("MyService");

// Checking the service status before stopping
if (sc.Status == ServiceControllerStatus.Running)
{
Log.WriteToFile($"Service MyService is currently running. Attempting to stop it.");
sc.Stop();
sc.WaitForStatus(ServiceControllerStatus.Stopped, TimeSpan.FromSeconds(15)); // Wait for the service to stop
Log.WriteToFile($"Service MyService stopped successfully.");
}

// Restarting the service after stopping
sc.Start();
sc.WaitForStatus(ServiceControllerStatus.Running, TimeSpan.FromSeconds(15)); // Wait for the service to start
Log.WriteToFile($"Service MyService started successfully.");
}
catch (Exception ex)
{
Log.WriteToFile($"Error restarting service: {ex.Message}");
}
}
else
{
Log.WriteToFile("Ping failed. Service restart skipped.");
}
}
catch (Exception ex)
{
Log.WriteToFile("Exception in PingCompleted handler: " + ex.Message);
}
};

// Sending Ping asynchronously
myPing.SendAsync(AppConfiguration.IP, 1000, null);
}
}
catch (Exception ex)
{
Log.WriteToFile("Exception in ServiceRestartTimer: " + ex.Message);
}
}
Меня не волнует сам код. Я хочу сказать следующее:

Этот журнал:

Код: Выделить всё

Log.WriteToFile("ReStart Service Is Called: " + " In Time : " + DateTime.Now.ToString());
распечатывается, как и этот журнал:

Код: Выделить всё

Log.WriteToFile($"Service MyService is currently running.  Attempting to stop it.");
Но когда sc.Stop(); выполняется, следующий журнал:

Код: Выделить всё

Log.WriteToFile($"Service MyService stopped successfully.");
не печатается, и кажется, что служба полностью останавливается, а остальная часть кода больше не запускается!

Нужна помощь ! 😭😂
Я ожидаю, что при достижении этого метода он должен правильно выполнить операцию перезапуска службы.
Я тестировал различные реализации, но ни одной из них сработало.

Подробнее здесь: https://stackoverflow.com/questions/793 ... ng-using-c
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»