gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:55:31 26 4
gpt4 key购买 nike

我必须在 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 上询问相关问题.

关于c# - 如何延迟关闭并在窗口服务中运行进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5217246/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com