Désactiver l'arrêt automatique des applications à l'arrêt

8

Existe-t-il une alternative Windows XP au processus d'arrêt de Windows Vista qui invite l'utilisateur à poursuivre ou annuler l'arrêt au cas où certains programmes contiennent des données non enregistrées?

Lawand
la source

Réponses:

10

Vous pouvez le faire avec du code en distribuant l' événement SystemEvents.SessionEnding . Cela affichera une boîte de dialogue lorsque vous essayez de vous déconnecter ou de vous arrêter et vous demandera si vous souhaitez annuler la fermeture de session ou l'arrêt.

Le code peut être compilé gratuitement avec Visual C # 2008 Express Edition ou avec le SDK Windows .

Avec le sdk, utilisez la commande suivante:

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

Voici le code:

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

    }
}

Éditer:

Source et exe téléchargeables .

Scott Weinstein
la source
seriez-vous une personne sympa et téléchargez-vous le "StopShutdown.exe" quelque part ou envoyez-le moi (Je comprendrais si vous disiez non)
Lawand
2
télécharger à partir de cid-552753bb951aae20.skydrive.live.com/self.aspx/.Public/…
Scott Weinstein
Bon travail, vous vous êtes vraiment approché: j'ai laissé un fichier non enregistré ouvert puis j'ai appelé l'arrêt à partir du menu Démarrer, puis une invite m'a demandé si je voulais annuler l'arrêt mais quand j'ai attendu quelques secondes, Windows a terminé votre programme et a exécuté le processus de fermeture ...
Lawand
Oui, si vous voulez que XP attende plus longtemps, vous devrez modifier les valeurs de registre mentionnées dans un autre article. Je mettrai à jour le code ...
Scott Weinstein
En fait, je veux que XP arrête définitivement le processus d'arrêt (comme le fait Vista). Quoi qu'il en soit, votre réponse est la plus proche à ce jour ...
Lawand
2

Si vous êtes prêt à faire une petite modification du registre ... Démarrer -> Exécuter -> regedit

HKEY_CURRENT_USER \ Control Panel \ Desktop

Assurez-vous que AutoEndTasks est 0 et définissez WaitToKillAppTimeout sur 20000 (la valeur par défaut de 2 secondes). Vous pouvez définir une valeur plus élevée si vous le souhaitez. Il existe également HungAppTimeout (la valeur par défaut est 5000), mais cela s'applique davantage aux applications qui ne répondent pas.

Percée
la source
Cela donne plus de temps pour que les applications soient fermées correctement, mais cela n'arrête pas définitivement le processus d'arrêt ...
Lawand
0

Chaque fois que je fais un arrêt sur XP, si un programme est occupé, il me donne une barre de progression et une option pour «Fin maintenant» ou «Annuler».

Cliquez sur «Annuler» pour arrêter le processus d'arrêt. Cependant, tout ce qu'il a déjà arrêté ne revient pas.

Mais cela me donne le temps de sauvegarder ce sur quoi je travaillais avant de réessayer l'arrêt.

garenne
la source
Mais si un programme répond (pas occupé), il sera forcé de fermer même s'il contenait des données non enregistrées
Lawand
ce n'est pas ce que vous avez demandé - s'il ne répond pas, peu importe que vous essayiez d'arrêter ou non, vous perdrez des données non enregistrées
warren
Désolé, je n'aurais pas dû dire "programmes occupés", je voulais dire des programmes qui contiennent des données non enregistrées et qui ne sont pas occupés ...
Lawand
1
oh, alors ma réponse est toujours valable - au moins sur les installations simples de XP: chaque fois que j'ai fait un arrêt mais que j'avais, par exemple, un document non enregistré dans Word, j'ai eu la possibilité d'annuler l'arrêt, de sauvegarder mon document (s), puis redémarrez le processus d'arrêt
warren
Il y a quelques jours, j'ai installé XP SP3 et maintenant le système fait ce que vous dites, alors qu'avec SP2 il ne l'a pas fait ...
Lawand