2015-01-08 3 views
0

웹 폼에서 Windows 폼을 여는 실행 파일을 실행 중입니다. Visual Studio에서 winform 프로그램은 메서드를 실행 한 다음 Windows 양식을 올바르게 닫고 프로그램을 종료합니다. 그러나 실행 파일과 동일한 파일을 실행하면 윈도우가 열린 상태로 유지됩니다. 이 실행 프로세스가 여전히 SmartSheetAPI.exe로 실행 중임을 알 수 있습니다. 내가 속성에서 확인할 때C#의 프로세스를 닫을 수 없습니다

enter image description here

파일의 이름은 "SmartSheetAPI.exe"입니다. 이 프로세스를 작업 관리자에서 끝내면 Windows 양식이 종료되므로 문제가 있다는 것을 알 수 있습니다. 그러나, 프로세스를 죽일 webform에서 아래 코드를 사용하여 시도했지만 다시 작동하지 않습니다.

Process process = new Process(); 
process.StartInfo.FileName = @"P:\Visual Studio 2013\Projects\Smartsheet\SmartsheetAPI\obj\Debug\SmartSheetAPI.exe"; 
process.Start(); 
foreach (var processes in Process.GetProcessesByName("SmartSheetAPI.exe")) 
{ 
    process.Kill(); 
} 

누구든지이 문제를 종료하는 방법을 알고 있습니까? 말하자면 Visual Studio의 SmartSheetAPI 프로그램에서 제대로 작동하지만 실행 파일을 종료하지는 않습니다. 방법을 실행하면이 프로세스를 종료해야합니다.

편집 : 닫히지 않은 프로세스는 vshost.exe이므로 내 애플리케이션이 어떤 이유로 닫히지 않습니다 (즉, Windows 양식이 열린 상태로 유지됨). 내가 process.kill()하면 모든 것이 필요에 따라 종료된다. 그러나 문제는 그 파일의 실행 파일을 실행하면 Windows 양식이 열려 있지만 vshost.exe를 닫아서 찾을 수 없다는 것입니다. 나는 그것을 사용하지 못했고 현재 닫히지 않을 프로세스는 현재 실행중인 프로그램 인 SmartSheetAPI.exe 파일입니다. 나는이 프로그램에서 나가기를 원하지만 아무 것도 시도하지 않는다.

+0

프로세스가 중단되면 프로세스를 종료하는 대신 문제를 정렬하는 것이 좋습니다. –

+0

파일 잠금 장치 조심하십시오. 파일에 대한 정보를 표시 할 수있는 모든 탐색기 창을 닫습니다. 탐색기 자체는 파일을 잠그지 않아야하지만 OS의 일부 항목이 파일을 잠글 수 있습니다. Sysinternals에는 프로세스 탐색기라는 프로그램이있어 파일 이름을 검색하여 잠긴 프로세스를 확인할 수 있습니다. –

답변

2

메서드를 호출 한 후에 WaitForExit 메서드를 호출하여 프로세스가 종료 될 때까지 기다리거나 HasExited 속성을 검사하여 프로세스가 종료되었는지 확인하십시오. 자세한 내용은

Process process = new Process(); 
process.StartInfo.FileName = @"P:\Visual Studio 2013\Projects\Smartsheet\SmartsheetAPI\obj\Debug\SmartSheetAPI.exe"; 
process.Start(); 
// do some stuff while process is alive ... 
process.Kill(); 
process.WaitForExit(); 
// do stuff after the process has been killed ... 

는 여기를 참조하십시오 프로세스는 아마 다른 뭔가를 기다리고 살해 할 수없는 경우 http://msdn.microsoft.com/en-us/library/system.diagnostics.process.kill(v=vs.110).aspx

. 애플리케이션을 강제 종료하지 않고 조사하는 것이 좋습니다.

+0

나는 모든 것을 시도했지만 여전히 효과가 없습니다. 나는 그것이 무엇을 기다리고 있을지 모른다. 또한, 뭔가를 기다리고 있다면 디버거에서 올바르게 종료되는 이유는 무엇입니까? – Danrex

+0

최소한의 노력으로 추적 (또는 로깅)을 수행하고 어떤 일이 발생하는지 봅니다. WaitForExit 메소드와 관련하여,이 메소드가 _forever_를 기다리는 지 확인할 수 있습니까? –

관련 문제