在关机前关闭程序

本文关键字:关闭程序 关机 | 更新日期: 2023-09-27 18:11:53

我在为一家公司写程序,我为供应商写程序。不幸的是,一位IT经理看到,员工在关闭电脑之前不会关闭这个程序,他对我说,你的应用程序必须在关闭之前关闭自己。我告诉他,这不是问题,窗口关闭了这个程序,但他说我不想看到(windows[等待后台程序关闭的窗口])。

之后,我发现这个代码:

        static void SystemEvents_SessionEnding(object sender, SessionEndingEventArgs e)
    {
        switch (e.Reason)
        {
            case SessionEndReasons.Logoff:
                Application.Exit();
                break;
            case SessionEndReasons.SystemShutdown:
                Application.Exit();
                break;
        }
    }

然后添加到Form_Load:

            SystemEvents.SessionEnding += SystemEvents_SessionEnding;

如果你在Application.Exit()之前写一个消息框,它显示它没有问题,但是,它不工作,我可以看到(窗口等待后台程序关闭)再次。

为什么? !我的代码有问题吗?!还有别的办法吗?

谢谢

在关机前关闭程序

正如这篇文章所说,c#中是否有一种方法可以检测Windows关闭/注销并取消该操作(在询问用户之后),似乎无法暂停超时问题。

也许你可以试试MSDN SessionEnding:

中的例子
private static int WM_QUERYENDSESSION = 0x11;
private static bool systemShutdown = false;
protected override void WndProc(ref System.Windows.Forms.Message m)
{
    if (m.Msg==WM_QUERYENDSESSION)
    {
        MessageBox.Show("queryendsession: this is a logoff, shutdown, or reboot");
        systemShutdown = true;
    }
    // If this is WM_QUERYENDSESSION, the closing event should be
    // raised in the base WndProc.
    base.WndProc(ref m);
} //WndProc 
private void Form1_Closing(
    System.Object sender, 
    System.ComponentModel.CancelEventArgs e)
{
    if (systemShutdown)
        // Reset the variable because the user might cancel the 
        // shutdown.
    {
        systemShutdown = false;
        if (DialogResult.Yes==MessageBox.Show("My application", 
            "Do you want to save your work before logging off?", 
            MessageBoxButtons.YesNo))
        {
            e.Cancel = true;
        }
        else
        {
            e.Cancel = false;
        }
    }
}

Windows Vista的关机更改可能会提供有关关机超时的更多信息

Try Environment.Exit(0);而不是Application.Exit();