Desabilitar a finalização automática de aplicativos no desligamento

8

Existe alguma alternativa do Windows XP ao processo de desligamento do Windows Vista, que avisa ao usuário se deseja continuar ou cancelar o desligamento caso alguns programas contenham dados não salvos?

    
por Lawand 19.08.2009 / 16:05

3 respostas

10

Você pode fazer isso com algum código, entregando os SystemEvents.SessionEnding

O código pode ser compilado gratuitamente com o Visual C # 2008 Express Edition ou com o windows SDK .

Com o sdk, use o seguinte comando:

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

Este é o código:

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);
        }

    }
}

Editar:

Fonte e exe baixáveis .

    
por 22.08.2009 / 22:31
2

Se você estiver disposto a fazer uma pequena edição do registro ... Iniciar - > Executar - > regedit

HKEY_CURRENT_USER \ Painel de controle \ Desktop

Verifique se AutoEndTasks é 0 e defina WaitToKillAppTimeout como 20000 (o valor padrão de 2 segundos). Você pode definir o valor mais alto, se desejar. Há também o HungAppTimeout (o defalt é 5000), mas isso se aplica mais a aplicativos que não estão respondendo.

    
por 19.08.2009 / 19:35
0

Sempre que eu faço um desligamento no XP, se um programa é ocupado, ele me dá uma barra de progresso e uma opção para 'End Now' ou 'Cancel'.

Clicar em 'Cancelar' interrompe o processo de desligamento. No entanto, o que quer que já tenha sido encerrado, não volta.

Mas isso me dá tempo para salvar o que eu estava trabalhando antes de tentar novamente o desligamento.

    
por 23.08.2009 / 04:11