c# – 如何延迟关闭并在窗口服务中运行进程

我必须运行一个进程,即 Windows关闭时的应用程序,是否有任何方法来延迟Windows关闭并在Windows服务中运行应用程序…
protected override void OnShutdown()
{
    // Add your save code here
    // Add your save code here
    StreamWriter str = new StreamWriter("D:\\Log.txt",true);
    str.WriteLine("Service stoped due to on" + DateTime.Now.ToString());
    str.Close();

    base.OnShutdown();
}

我使用上面的函数覆盖了关闭,我能够写一个日志条目到文本文件,但我之后无法运行应用程序在搜索时我发现延迟低于用户激活关闭后的几秒钟

this.RequestAdditionalTime(250000);

这给关闭事件添加时间延迟25秒,但我无法运行应用程序.任何人都可以提出方法或想法在关机时运行应用程序.

解决方法

在Windows Vista中,应用程序阻止挂起的系统关闭的能力受到严格限制.有关详细信息,请参阅MSDN上的两篇方便文章Shutdown Changes for Windows VistaApplication Shutdown Changes in Windows Vista.

如该页面所示,您不应该依赖于阻止关机超过5秒的能力.如果您希望尝试阻止挂起的关闭事件,您的应用程序应使用新的ShutdownBlockReasonCreate function,它允许您注册一个字符串,向用户解释您认为应该阻止关闭的原因.用户保留注意您的建议并取消关机的能力,或者保持警惕并取消.

一旦您的应用程序完成不应该被关闭中断的任何操作,您应该调用相应的ShutdownBlockReasonDestroy function,它释放原因字符串并指示系统现在可以关闭.

还要记住Windows Services now run in an isolated session禁止用户交互. My answer here还提供了更多细节,以及漂亮的图表.

基本上,这是不可能的. Windows将为您在服务中启动一个单独的进程以及阻止挂起关闭的任何尝试而斗争.最终,用户可以覆盖您尝试拉动的任何内容.这听起来像你应该使用安全策略解决的问题,而不是在Server Fault上的应用程序问题.

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...