Desativar encerramento automático de aplicativos no desligamento

8

Existe alguma alternativa do Windows XP ao processo de desligamento do Windows Vista que solicite ao usuário que continue ou cancele o desligamento no caso de alguns programas conterem dados não salvos?

Lawand
fonte

Respostas:

10

Você pode fazer isso com algum código entregando o evento SystemEvents.SessionEnding . Isso exibirá uma caixa de diálogo quando você tentar fazer logoff ou desligamento e perguntar se deseja cancelar o logoff ou desligamento.

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 

Aqui está 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 para download .

Scott Weinstein
fonte
você seria uma pessoa legal e faria o upload do "StopShutdown.exe" em algum lugar ou o enviaria por e-mail para mim? (Eu entendo se você não disse)
Lawand
Bom trabalho, você chegou muito perto: deixei um arquivo não salvo aberto e invoquei o desligamento no menu Iniciar. Em seguida, um prompt me perguntava se eu queria cancelar o desligamento, mas quando esperei alguns segundos, o Windows encerrou o programa e executou. o processo de desligamento ...
Lawand 23/08/09
Sim, se você quiser que o XP espere mais, precisará modificar os valores do registro mencionados em outra postagem. Vou atualizar o código ...
Scott Weinstein
Na verdade, eu quero que o XP interrompa o processo de desligamento permanentemente (como o Vista faz). De qualquer forma a sua resposta é o mais próximo até agora ...
Lawand
2

Se você estiver disposto a editar um pouco o registro ... Iniciar -> Executar -> regedit

HKEY_CURRENT_USER \ Painel de controle \ Área de trabalho

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 padrão é 5000), mas isso se aplica mais a aplicativos que não estão respondendo.

Avanço
fonte
Isto dá mais tempo para os aplicativos a ser fechada, mas não parar permanentemente o processo de desligamento ...
Lawand
0

Sempre que eu faço um desligamento no XP, se um programa está ocupado, isso me dá uma barra de progresso e uma opção para 'Finalizar agora' ou 'Cancelar'.

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

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

Warren
fonte
Mas se um programa está respondendo (não ocupado) será forçada a fechar, mesmo que ele continha dados não salvos
Lawand
isso não é o que você pediu - se ele não está respondendo, não importa se você está tentando desligar ou não, você vai perder os dados não salvos
Warren
Desculpe, eu não deveria ter dito "programas ocupado", eu quis dizer programas que contêm um conjunto de dados que não foram salvos e que não estão ocupados ...
Lawand
11
ah, então minha resposta ainda permanece - pelo menos em instalações simples do XP: sempre que eu fechei, mas tive, por exemplo, um documento não salvo no Word, tive a oportunidade de cancelar o desligamento, salvar meu documento (s), e, em seguida, reiniciar o processo de encerramento
Warren
Alguns dias atrás eu instalado XP SP3 e agora o sistema faz o que você diz, enquanto que com SP2 não fiz ...
Lawand