Службы Windows - операционная система закрывается слишком быстро - PullRequest
1 голос
/ 14 ноября 2011

Во-первых, я хотел бы извиниться за мой английский язык. Я пытаюсь создать службу Windows, которая запускает программу для данных BuckUp, когда компьютер выключается. Проблема заключается в том, что операционная система во время выключения, чтобы убить мою службу Windows, прежде чем данные резервной копии будут выполнены до конца. Я изменил значение реестра HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ WaitToKillServiceTimeout на 3600000, но это не помогло, моя служба Windows была убита перед выполнением. Может быть, кто-то знает, как сделать так, чтобы операционная система не убивала службу Windows так быстро, чтобы можно было создавать резервные копии данных. Пожалуйста, помогите мне, я жду вашего ответа. Ниже я включаю свой код службы Windows:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Diagnostics;
    using System.Linq;
    using System.ServiceProcess;
    using System.Text;
    using System.IO;

    namespace backUp_ser
    {
        public partial class Service1 : ServiceBase
        {
            public Service1()
            {
                InitializeComponent();
                this.CanShutdown = true;
            }

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

            protected override void OnStop()
            {
            }

            protected override void OnShutdown()
            {
                ProcessStartInfo stratInfo = new ProcessStartInfo();
                stratInfo.WindowStyle = ProcessWindowStyle.Hidden;
                stratInfo.FileName = "C:\\Program Files\\Cobian Backup 10\\Cobian.exe";
                stratInfo.Arguments = "list:C:\\Program Files\\Cobian Backup 10\\DB\\MainList.lst -bu -nogui -autoclose";

                Process process = Process.Start(stratInfo);
                process.WaitForExit(360000);
            }
        }
    }

1 Ответ

1 голос
/ 14 ноября 2011

Помимо вашего запроса, я хочу напомнить вам, что службы работают в отдельном сеансе входа в систему и службы не будут взаимодействовать с сеансом рабочего стола, вошедшим в систему (в основном).

Итак, вам нужно перехватить событие завершения работы в вашем сервисном коде. Затем вам нужно удерживать событие завершения работы до завершения процесса резервного копирования. Вы можете перехватить эти события Windows через сообщения / очереди сообщений . Вам необходимо перехватить события WM_ENDSESSION / WM_QUERYENDSESSION.

Этот запрос уже обсуждался в этом посте. Вы можете отослать , что.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...