首先,我想为我的英语道歉。我尝试创建一个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);
}
}
}
答案 0 :(得分:1)
除了您的查询之外,我想提醒您服务在单独的登录会话中运行,并且服务不会与登录的桌面会话(主要是)进行交互。
因此,您需要拦截服务代码中的关闭事件。然后,您需要保持关闭事件,直到完成备份过程。您可以通过message pumps/queues挂钩这些Windows事件。您需要拦截WM_ENDSESSION / WM_QUERYENDSESSION事件。
此帖子已经讨论过此查询。你可以refer那个。