종료 할 때 리소스를 정리해야하는 .NET 콘솔 앱에서 작업하고 있습니다. 내가 겪고있는 문제는 cmd 부모가 [X] 콘솔 창을 통해, 작업 관리자/프로세스 탐색기를 통해 또는 프로그래밍 방식으로 WM_CLOSE를 통해 닫히는 경우 알림이 표시되지 않는다는 것입니다. 내가 살 수 있는와 함께 살 수 킬 프로세스 작업 관리자에서. 또는 ProcExp. 부모 콘솔의 WM_CLOSE는 처리가 완료되기 전에이 응용 프로그램이 종료 될 가능성이 가장 높습니다. 나는 콘솔에서 CTRL + C를 보내거나 응용 프로그램이 중단 끝날 때부모 프로세스 종료 확인 방법?
AppDomain.CurrentDomain.ProcessExit += CurrentDomainProcessExit;
AppDomain.CurrentDomain.UnhandledException += CurrentDomainUnhandledException;
Console.CancelKeyPress += ConsoleCancelKeyPress;
Application.ApplicationExit += ApplicationApplicationExit;
Process parentProcess = ProcessInfo.GetParentProcess(
Process.GetCurrentProcess());
parentProcess.Disposed += ParentDisposed;
parentProcess.Exited += ParentExited;
Process grandParentProcess = ProcessInfo.GetParentProcess(parentProcess);
grandParentProcess.Disposed += GrandParentDisposed;
grandParentProcess.Exited += GrandParentExited;
이러한 이벤트가 제대로 불 :
는 여기에 지금까지 등록을 시도한 이벤트입니다. 하지만 부모 앱 (cmd 콘솔)을 닫을 때 실행되는 프로그램은 없습니다. (부모/조부모 프로세스는 CLR이 아니므로 Disposed/Exited 이벤트를받을 수 있을지 잘 모르겠다. 어둡기 만 한 장면입니다.) 일부 pInvoke 항목을 살펴 봤지만 차라리 내려 가지 않을 것입니다. 그 길 .NET이 옵션이라면.
이러한 상황에서 시스템 종료를 감지하고 처리하는 방법이 있습니까? 나는 모든 .NET, pInvoke/Win32/C/C++ 솔루션에 개방되어 있습니다. (기본적으로 Windows 플랫폼에서 수행 할 수 있습니다.)
감사합니다.
P. .NET 2.0에서 계속 작동하므로 .NET 3.0에서 도입 된 아무것도 사용할 수 없습니다.
어떤 종류의 자원을 정리해야하며 어떤 종류의 정리가 필요합니까? –
부모님은 콘솔 앱이라고 말씀 하셨지만 WM_CLOSE에 대해 언급하셨습니다. 부모가 콘솔 앱입니까 (이 경우 창이 없음) 또는 창 응용 프로그램입니까? (이 경우 WM_CLOSE를 보낼 수 있습니다)? – Gabe
@ 존 : 프로세스가 조기에 중단 된 경우 중지해야하는 다른 작업을 실행합니다. 그렇지 않으면 하위 작업이 고아가되고 스폰 프로세스없이 완료됩니다. –