종료시 응용 프로그램 자동 종료 비활성화


8

일부 프로그램에 저장되지 않은 데이터가 포함 된 경우 사용자에게 종료를 계속할지 또는 취소할지 묻는 Windows Vista의 종료 프로세스에 대한 Windows XP 대안이 있습니까?

답변:


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"를 어딘가에 업로드하거나 나에게 이메일을 보내시겠습니까? (당신이
거절


잘하셨습니다. 저장하지 않은 파일을 연 상태에서 시작 메뉴에서 시스템 종료를 호출 한 후 시스템 종료를 취소 할 것인지 묻는 메시지가 표시되지만 몇 초 동안 기다렸을 때 Windows가 프로그램을 종료하고 수행했습니다. 종료 프로세스 ...
Lawand

예, XP를 더 오래 기다리려면 다른 게시물에 언급 된 레지스트리 값을 수정해야합니다. 나는 ... 코드를 업데이트합니다
스콧 와인 스타 인에게

실제로 XP가 Vista와 같이 종료 프로세스를 영구적으로 중단하고 싶습니다. 어쨌든 당신의 대답은 지금까지 가장 가깝습니다 ...
Lawand

2

약간의 레지스트리 편집을 원한다면 시작-> 실행-> regedit

HKEY_CURRENT_USER \ 제어판 \ 데스크탑

AutoEndTasks가 0인지 확인하고 WaitToKillAppTimeout을 20000 (기본값 2 초)으로 설정하십시오. 원하는 경우 값을 더 높게 설정할 수 있습니다. HungAppTimeout (소거는 5000)도 있지만 응답하지 않는 응용 프로그램에 더 많이 적용됩니다.


이로 인해 앱이 제대로 종료되는 데 더 많은 시간이 걸리지 만 종료 프로세스가 영구적으로 중지되지는 않습니다.
Lawand

0

XP에서 종료 할 때마다 프로그램이 사용중인 경우 진행률 표시 줄과 '지금 종료'또는 '취소'에 대한 옵션이 표시됩니다.

'취소'를 클릭하면 종료 프로세스가 중지됩니다. 그러나 이미 종료 된 항목은 다시 나타나지 않습니다.

그러나 종료를 다시 시도하기 전에 내가하고 있던 작업을 저장할 시간을줍니다.


그러나 프로그램이 응답하지 않으면 (바쁘지 않은 경우) 저장되지 않은 데이터가 포함되어 있어도 프로그램을 종료해야합니다.
Lawand

그것은 당신이 요구 한 것이 아닙니다-응답하지 않는다면, 당신이 셧다운을 시도하든
warren

죄송합니다, "바쁜 프로그램"이라고
말해서

1
오, 그럼 내 대답은 여전히 ​​XP의 일반 바닐라 설치에서 여전히 멈 춥니 다. 종료를 완료했지만 Word에 저장되지 않은 문서가있을 때마다 종료를 취소 할 수있는 기회가 있었고 내 문서를 저장했습니다. 종료 프로세스를 다시 시작합니다
warren

며칠 전에 나는 XP SP3을 설치했고 이제 시스템은 당신이하는 말을하지만 SP2에서는 그렇지 않았다.
Lawand
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.