【问题标题】:How to delay shutdown of an application when user logs off or shuts down Windows?当用户注销或关闭 Windows 时,如何延迟关闭应用程序?
【发布时间】:2011-03-04 02:53:08
【问题描述】:

我正在编写一个从启动到关闭在后台运行的应用程序,在某些情况下,我需要该应用程序显示一个对话框供用户选择是否继续关闭。此应用程序只能在 Windows 上运行,但可以在 2000 以后的任何版本上运行。

虽然我确实对该主题进行了一些研究,但有关 Windows 处理应用程序关闭方式 (http://msdn.microsoft.com/en-us/library/ms700677(VS.85).aspx) 的信息似乎有点分散。如果有人有处理此问题的最佳方法的示例,或有关该主题的其他知识,我将非常感激(我对 C# 的经验很少)。

谢谢!!

坏熊猫

编辑:我知道阻止关机不是一个好习惯。这是此应用程序的一项关键业务需求。

编辑:根据以下几位评论员的建议(重新设计以便不需要阻止关闭),我使用了 NotifyIcon Balloon 弹出窗口来通知用户在应用程序发送数据时不要关闭。虽然这不太可能阻止数据在本地计算机上保留数周,但我认为这是最佳实践和业务需求之间的良好折衷。毕竟,如果用户会变得愚蠢……那么,用户就会变得愚蠢。

【问题讨论】:

    标签: c# windows dialog system-shutdown


    【解决方案1】:

    我同意 JAB。程序化解决方案不能用于解决硬件故障。查看设置域权限以禁止关机。为了有效,您可能还需要限制硬件访问。您还可以添加 UPS 或通过热站点备份获得各种 $$。

    这听起来确实像是基于事务的瘦客户端应用程序的工作。

    【讨论】:

    • 对不起,我一定没有很好地澄清自己。这种情况与硬件故障的情况完全没有关系。限制用户访问关闭绝对不是一种选择。鉴于此方法仍在运行,应用程序只需询问用户是否希望继续关闭。大多数时候,这不会是一个问题。需要实施此功能的唯一原因是,如果用户不知道该问题,他们将完全不知道他们的信息没有被发送。
    【解决方案2】:

    嗯,您链接的 MSDN 文章清楚地解释了这一点:如果您的应用程序在 Vista 或 Win7 上运行,则无法阻止 Windows 关闭。提示用户不工作,对话框将无法访问。您将不得不考虑处理此问题的应用程序设计。

    【讨论】:

    • 其实按照文章的说法,只要实现了处理关机的新API,就可以阻塞关机。 (或者至少我是这么读的。如果我不正确,请告诉我。)
    • 没有。我建议你试试这个。注意强制按钮。
    • 在某些情况下(不是大多数情况,但在运行特定方法时),这绝对是业务关键。唯一的其他选择是请求用户重新启动他们的计算机以允许应用程序完成任务。这是因为它服务于一个以计算机为第二优先的行业的客户,而且通常几周都不会启动,但任务必须及时完成。
    • 您是否无法修改该方法,以便在启动关闭时,应用程序将创建一条日志消息,并且如果它正在其他地方发送某种类型的数据,它将回滚它正在执行的任何操作,或者会以其他方式以安全的方式失败吗?停机有时是不可避免的。事实上,当运行应用程序的计算机由于停电或电缆断开/电源线拔出而断电时会发生什么?即使操作系统 API 正确支持该应用程序,该应用程序显然也无法阻止计算机在这种情况下关闭。
    • 您无法通过程序可靠地执行关键业务安全策略。系统管理员需要从用户帐户中删除 SeShutdownPrivilege 权限。在 serverfault.com 上询问有关它的问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 2011-10-11
    • 1970-01-01
    相关资源
    最近更新 更多