Nonaktifkan penghentian aplikasi secara otomatis saat shutdown

8

Apakah ada alternatif Windows XP untuk proses shutdown Windows Vista yang meminta pengguna apakah akan melanjutkan atau membatalkan shutdown jika beberapa program berisi data yang belum disimpan?

Lawand
sumber

Jawaban:

10

Anda dapat melakukan ini dengan beberapa kode dengan menyerahkan acara SystemEvents.SessionEnding . Ini akan menampilkan kotak dialog ketika Anda mencoba untuk logoff atau shutdown dan bertanya apakah Anda ingin membatalkan logoff atau shutdown.

Kode dapat dikompilasi secara gratis dengan Visual C # 2008 Express Edition atau dengan windows SDK .

Dengan sdk, gunakan perintah berikut:

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

Berikut kodenya:

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

    }
}

Edit:

Sumber dan exe yang dapat diunduh .

Scott Weinstein
sumber
apakah Anda akan menjadi orang yang baik dan mengunggah "StopShutdown.exe" di suatu tempat atau mengirim email kepada saya? (Saya akan mengerti jika Anda mengatakan tidak)
Lawand
Kerja bagus, Anda sudah benar-benar dekat: Saya membiarkan file yang belum disimpan terbuka lalu saya memanggil shutdown dari menu start, selanjutnya prompt bertanya kepada saya apakah saya ingin membatalkan shutdown tetapi ketika saya menunggu beberapa detik, Windows menghentikan program Anda dan melakukan proses penutupan ...
Lawand
Ya, jika Anda ingin XP menunggu lebih lama, Anda harus mengubah nilai registri yang disebutkan dalam pos lain. Saya akan memperbarui kode ...
Scott Weinstein
Sebenarnya saya ingin XP menghentikan proses shutdown secara permanen (seperti Vista lakukan). Lagi pula jawaban Anda adalah yang paling dekat sejauh ini ...
Lawand
2

Jika Anda bersedia melakukan sedikit pengeditan registri ... Mulai -> Jalankan -> regedit

HKEY_CURRENT_USER \ Control Panel \ Desktop

Pastikan AutoEndTasks adalah 0, dan atur WaitToKillAppTimeout ke 20000 (nilai default 2 detik). Anda dapat menetapkan nilai lebih tinggi jika diinginkan. Ada juga HungAppTimeout (defalt adalah 5000), tetapi itu berlaku lebih untuk aplikasi yang tidak merespons.

Penerobosan
sumber
Ini memberi lebih banyak waktu untuk aplikasi untuk ditutup dengan benar, tetapi itu tidak secara permanen menghentikan proses penutupan ...
Lawand
0

Setiap kali saya melakukan shutdown pada XP, jika suatu program sibuk, itu memberi saya bilah kemajuan dan opsi untuk 'Akhiri Sekarang' atau 'Batalkan'.

Mengklik 'Batal' menghentikan proses penutupan. Namun, apa pun yang sudah dimatikan tidak muncul kembali.

Tapi itu memberi saya waktu untuk menghemat apa yang saya kerjakan sebelum kembali mencoba shutdown.

warren
sumber
Tetapi jika suatu program merespons (tidak sibuk) itu akan dipaksa untuk menutup bahkan jika itu berisi data yang tidak disimpan
Lawand
bukan itu yang Anda tanyakan - jika tidak merespons, tidak masalah jika Anda mencoba mematikan atau tidak, Anda akan kehilangan data yang belum disimpan
warren
Maaf, saya seharusnya tidak mengatakan "program sibuk", maksud saya program yang berisi data yang belum disimpan dan yang tidak sibuk ...
Lawand
1
oh, maka jawaban saya masih tetap - setidaknya pada instalasi XP vanilla: setiap kali saya melakukan shutdown tetapi, misalnya, memiliki doc yang belum disimpan di Word, saya memiliki kesempatan untuk membatalkan shutdown, simpan doc saya (s), dan kemudian restart proses shutdown
warren
Beberapa hari yang lalu saya menginstal XP SP3 dan sekarang sistem melakukan apa yang Anda katakan, sedangkan dengan SP2 tidak ...
Lawand