Windows服务 - 操作系统关闭太快

时间:2011-11-14 02:04:25

标签: c# windows-services

首先,我想为我的英语道歉。我尝试创建一个Windows服务,在计算机关闭时运行BuckUp数据程序。 问题是在关机期间操作系统在BackUp数据被执行之前杀死我的Windows服务。我将注册表值HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ WaitToKillServiceTimeout更改为3600000,但它没有帮助,我的Windows服务在执行之前被终止。也许有人知道如何使操作系统不会快速杀死Windows服务,以便可以制作BackUp数据。请帮帮我,我在等你的回复。下面我包括我的代码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 个答案:

答案 0 :(得分:1)

除了您的查询之外,我想提醒您服务在单独的登录会话中运行,并且服务不会与登录的桌面会话(主要是)进行交互。

因此,您需要拦截服务代码中的关闭事件。然后,您需要保持关闭事件,直到完成备份过程。您可以通过message pumps/queues挂钩这些Windows事件。您需要拦截WM_ENDSESSION / WM_QUERYENDSESSION事件。

此帖子已经讨论过此查询。你可以refer那个。