2012-01-15 3 views
4

WinForms 응용 프로그램이 있습니다. 그리고 여기 Form_Load 메소드의 코드가 있습니다.자식이 실행 중일 때 상위 프로세스에서 종료

Process proc = new Process(); 
proc.StartInfo.FileName = @"C:\program files\MyProgram\start.exe"; 
proc.StartInfo.Arguments = Application.ExecutablePath; 
proc.Start(); 

Application.Exit(); 

Application.Exit을 호출 할 때 부모 프로세스가 프로그램을 닫지 않는 이유는 무엇입니까? 문제를 감지하는 방법?

+2

Load 이벤트가 실행될 때 응용 프로그램이 아직 시작되지 않았으므로. If는 폼을 만드는 데 거의 의미가 없으며 즉시 앱을 종료하려고합니다. 양식을 만들면 안됩니다. Program.cs에서 Main() 메서드 편집 –

+0

권장 사항을 제공하기 전에 달성하려는 내용을 정확히 이해하려고합니다. 기본 폼의로드 이벤트에서 다른 프로세스를 시작하는 Windows 폼 응용 프로그램이 있습니까? 이것은 부모 WinForms 응용 프로그램의 유일한 목적입니까? –

답변

0

Windows Forms 응용 프로그램을 종료하려면 주 양식을 닫아야합니다. Program.Main()의 코드를 살펴보면 주 스레드를 계속 유지하는 것이 주 폼이라는 것을 알 수 있습니다. 그것을 닫으면 응용 프로그램이 종료됩니다.

+0

하지만 this.Close()를 호출하려고하면 너무 잘 작동하지 않습니다. – Neir0

+0

Form_Load가 호출 되었습니까? –

+0

예, Form_load가 호출됩니다. 그리고 start.exe와 부모 프로세스는 같은 프로그램이지만 실행 경로를 확인합니다. – Neir0

3

새 프로세스를 시작하면 프로세스 수명이 현재 응용 프로그램의 프로세스와 독립적입니다. 현재 응용 프로그램의 수명에 직접 연결되는 실행 아티팩트를 원한다면 스레드를 사용하십시오. 당신은 당신이 그것을 자식 프로세스를 만들고 종료 하시겠습니까 경우

, 당신은 그것을 죽일 필요가 수 있기 때문에

Process proc = new Process(); 
proc.StartInfo.FileName = @"C:\program files\MyProgram\start.exe"; 
proc.StartInfo.Arguments = Application.ExecutablePath; 
proc.Start(); 

// When terminating: 
proc.Kill(); 
proc.WaitForExit(); 
Application.Exit(); 

그러나, 나는 대부분의 시나리오에 대한 위를 권하고 싶지 않다 중요한 작업 (예 : 파일로 저장)을 수행하는 동안 하위 프로세스가 종료되면 데이터가 손상 될 수 있습니다.

관련 문제