我必须运行一个进程,即
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);
解决方法
在Windows Vista中,应用程序阻止挂起的系统关闭的能力受到严格限制.有关详细信息,请参阅MSDN上的两篇方便文章:
Shutdown Changes for Windows Vista和
Application Shutdown Changes in Windows Vista.
如该页面所示,您不应该依赖于阻止关机超过5秒的能力.如果您希望尝试阻止挂起的关闭事件,您的应用程序应使用新的ShutdownBlockReasonCreate
function,它允许您注册一个字符串,向用户解释您认为应该阻止关闭的原因.用户保留注意您的建议并取消关机的能力,或者保持警惕并取消.
一旦您的应用程序完成不应该被关闭中断的任何操作,您应该调用相应的ShutdownBlockReasonDestroy
function,它释放原因字符串并指示系统现在可以关闭.
还要记住Windows Services now run in an isolated session并禁止与用户交互. My answer here还提供了更多细节,以及漂亮的图表.
基本上,这是不可能的. Windows将为您在服务中启动一个单独的进程以及阻止挂起关闭的任何尝试而斗争.最终,用户可以覆盖您尝试拉动的任何内容.这听起来像你应该使用安全策略解决的问题,而不是在Server Fault上的应用程序问题.