Отключить автоматическое завершение приложений при выключении

8

Существует ли какая-либо альтернатива Windows XP процессу завершения работы Windows Vista, которая предлагает пользователю продолжить или отменить отключение в случае, если некоторые программы содержат несохраненные данные?

Lawand
источник

Ответы:

10

Вы можете сделать это с помощью некоторого кода, передав событие SystemEvents.SessionEnding . Это отобразит диалоговое окно, когда вы попытаетесь выйти из системы или завершить работу и спросить, хотите ли вы отменить выход из системы или завершение работы.

Код можно бесплатно скомпилировать с помощью Visual C # 2008 Express Edition или с помощью Windows 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
2
скачать с cid-552753bb951aae20.skydrive.live.com/self.aspx/.Public/…
Скотт Вайнштейн
Хорошая работа, вы подошли очень близко: я оставил несохраненный файл открытым, затем вызвал завершение работы из меню «Пуск», затем мне было предложено отменить завершение работы, но когда я подождал пару секунд, Windows остановила вашу программу и выполнила команду. процесс выключения ...
Lawand
Да, если вы хотите, чтобы XP дольше ждал, вам нужно изменить значения реестра, упомянутые в другом посте. Я обновлю код ...
Скотт Вайнштейн
На самом деле я хочу, чтобы 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), а затем перезапустите процесс завершения работы
Уоррен
Пару дней назад я установил XP SP3, и теперь система делает то, что вы говорите, тогда как с SP2 это не ...
Lawand