powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / c# Windows Service событие на завершения работы
4 сообщений из 4, страница 1 из 1
c# Windows Service событие на завершения работы
    #39385071
Nechto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!

Я написал свою службу, которая выполняет запуск bat файла, при событии завершения работы windows. Все работает отлично, но есть одно НО . При завершении работы, windows не дожидается пока выполнится процесс сервиса и прибивает его. В итоге задача не выполняется полностью.

Как проинформировать windows о том, что процесс запущенного сервиса нельзя прерывать, до его полного выполнения?


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
using System.Diagnostics;
using System.IO;
using System.ServiceProcess;
using Microsoft.Win32;

namespace CmdService
{
    public partial class ServiceCmd : ServiceBase
    {
        public ServiceCmd()
        {
            InitializeComponent();
            SystemEvents.SessionEnded += SystemEventsOnSessionEnding;
        }

        private void SystemEventsOnSessionEnding(object sender, SessionEndedEventArgs sessionEndingEventArgs)
        {
            // Еще одно событие на завершения работы виндовс
            if (sessionEndingEventArgs.Reason == SessionEndReasons.SystemShutdown)
            {
                RunConsoleCommands();
            }
        }

        protected override void OnStart(string[] args)
        {
        }

        protected override void OnShutdown() // Событие на завершения работы виндовс
        {
            RunConsoleCommands();
            base.OnShutdown();
        }

        private void RunConsoleCommands()
        {
            try
            {
                var path = Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location);
                if (path != null && File.Exists(Path.Combine(path, "cmd.bat")))
                {
                    var process = new Process();
                    var processStartInfo = new ProcessStartInfo
                    {
                        FileName = "cmd.bat", // В батнике производится процесс копирования файлов
                        WorkingDirectory = path,
                        UseShellExecute = true
                    };
                    process.StartInfo = processStartInfo;
                    process.Start();
                    process.WaitForExit();
                    process.Close();
                }
            }
            catch
            {
                // ignored
            }
        }
    }
}
...
Рейтинг: 0 / 0
c# Windows Service событие на завершения работы
    #39393893
ntkrnlmp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Nechto,

Попробуйте метод ServiceBase.RequestAdditionalTime().
Но никаких гарантий нет, время на завершение работы всех сервисов ограничено.
...
Рейтинг: 0 / 0
c# Windows Service событие на завершения работы
    #39394151
Nechto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я потратил на решения данной задачи много времени, но так и не смог её решить. Видимо стандартными средствами c# эту задачу не решить. Возможно её нужно решать со стороны настроек самой винды, но как это сделать я не знаю.
...
Рейтинг: 0 / 0
c# Windows Service событие на завершения работы
    #39394161
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nechto, эм... а зачем вы писали свою службу? По каким-то причинам не хватило Use Startup, Shutdown, Logon, and Logoff Scripts
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / c# Windows Service событие на завершения работы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]