微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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上的应用程序问题.

原文地址:https://www.jb51.cc/csharp/97454.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐