加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 18:04:33 所属栏目:百科 来源:网络整理
导读:我必须运行一个进程,即 Windows关闭时的应用程序,是否有任何方法来延迟Windows关闭并在Windows服务中运行应用程序… protected override void OnShutdown(){ // Add your save code here // Add your save code here StreamWriter str = new StreamWriter("D
我必须运行一个进程,即 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 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上的应用程序问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读