禁用关闭时自动终止应用程序


8

Windows Vista的关闭过程是否有Windows XP替代品,如果某些程序包含未保存的数据,它会提示用户继续还是取消关闭?

Answers:


10

您可以通过处理SystemEvents.SessionEnding事件来使用一些代码来完成此操作。当您尝试注销或关闭并询问是否要取消注销或关闭时,将显示一个对话框。

可以使用Visual C#2008 Express EditionWindows SDK免费编译代码。

对于sdk,请使用以下命令:

csc.exe   /out:StopShutdown.exe /target:winexe StopShutdown.cs 

这是代码:

using System;
using System.Windows.Forms;
using Microsoft.Win32;

namespace StopShutdown
{
    static class Program
    {
        [STAThread]
        static void Main()
        {
           string desktopRegKey = @"HKEY_CURRENT_USER\Control Panel\Desktop";
           Registry.SetValue(desktopRegKey, "AutoEndTasks", 0);
           Registry.SetValue(desktopRegKey, "WaitToKillAppTimeout", 20000);
           Registry.SetValue(desktopRegKey, "HungAppTimeout", 20000);

            Form AppForm = new Form()
                {
                    ClientSize = new System.Drawing.Size(0, 0),
                    ControlBox = false,
                    FormBorderStyle = FormBorderStyle.None,
                    Opacity = 0,
                    ShowIcon = false,
                    ShowInTaskbar = false,
                    SizeGripStyle = SizeGripStyle.Hide,
                };

            SystemEvents.SessionEnding += (_e, e) =>
            {
                DialogResult dr = MessageBox.Show(
                                    "Cancel shutdown?"
                                    , "Shutdown",
                                    MessageBoxButtons.YesNo,
                                    MessageBoxIcon.Question,
                                    MessageBoxDefaultButton.Button1);

                e.Cancel = (dr == DialogResult.Yes);
            };


            Application.Run(AppForm);
        }

    }
}

编辑:

可下载的源代码和exe


您会是一个好人吗,将“ StopShutdown.exe”上传到某个地方或通过电子邮件发送给我?(如果您说不,我会明白的)
Lawand


好的工作,您真的关闭了:我打开了一个未保存的文件,然后从开始菜单中调用了shutdown,接下来出现提示询问我是否要取消关机,但是当我等待几秒钟时,Windows终止了程序并执行了关闭过程...
Lawand

是的,如果您希望XP等待更长的时间,则需要修改另一篇文章中提到的注册表值。我将更新代码...
Scott Weinstein,2009年

实际上,我希望XP永久停止关机过程(就像Vista一样)。无论如何,您的答案是迄今为止最接近的答案……
Lawand

2

如果您愿意做一些注册表编辑...开始->运行-> regedit

HKEY_CURRENT_USER \控制面板\桌面

确保AutoEndTasks为0,并将WaitToKillAppTimeout设置为20000(默认值为2秒)。您可以根据需要将值设置得更高。还有HungAppTimeout(默认值为5000),但这对没有响应的应用程序更适用。


这为应用程序正常关闭提供了更多时间,但不会永久停止关闭过程……
Lawand

0

每当我在XP上关闭计算机时,如果程序很忙,它都会显示进度条和“立即结束”或“取消”选项。

单击“取消”将停止关闭过程。但是,无论已关闭的设备都不会恢复。

但这确实让我有时间在重新尝试关闭之前保存正在处理的内容。


但是,如果某个程序正在响应(不忙),即使它包含未保存的数据,也将被迫关闭
Lawand

这不是您要的内容-如果它没有响应,则不管您是否尝试关闭,都将丢失未保存的数据
Warren

抱歉,我不应该说“繁忙的程序”,我的意思是包含未保存数据并且不忙的程序...
Lawand

1
哦,那我的答案仍然成立-至少在XP的纯香草安装上:每当我执行关闭操作但例如在Word中有未保存的文档时,我就有机会取消关闭操作,保存我的文档(s),然后重新启动关机过程
沃伦(Warren)在2009年

几天前,我安装了XP SP3,现在系统可以执行您所说的操作,而使用SP2则没有...
Lawand 2009年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.