2012-01-03 2 views
1

나는 윈도우 응용 프로그램에서 일하고 있습니다. 나는 내 응용 프로그램에서 일부 창 exe 실행해야, 같은 일을 할 수 있지만 내 응용 프로그램을 닫을 때 이러한 exe 실행 상태에 남아, 내가 어떻게 그 exe 닫을 수 없습니다 지 않습니다. 몇 가지 팁을 제안하십시오. 닫는 프로세스가 닫히거나 종료 할 때 응용 프로그램에서 Windows 응용 프로그램에서 시작

는 응용 프로그램이 아마 때문에 닫는 일단 당신이 당신의 응용 프로그램에서 실행 한 EXE가 종료되지 않는 과정

private void CloseStartedProcesses() 
    { 
     while (localProcess.Count > 0) 
     { 
      Process process = localProcess.Pop(); 
      if (process != null && !process.HasExited) 
      { 
       process.CloseMainWindow(); 
       process.Close(); 
      } 
     } 
    } 
+3

어떻게 당신이 응용 프로그램을 닫습니다합니까? 몇 가지 코드를 보여주세요! – Matthias

+0

processinfo 유형 변수에 프로세스 정보를 저장하고 somevariable.kill()을 시도했지만 "프로세스가 종료되었으므로 요청을 처리 할 수 ​​없습니다."라는 오류가 발생하지 않았습니다. – Abhishek

+0

프로세스가 종료 된 경우 해당 프로세스가 이미 종료되었음을 의미합니다. 문제 해결됨. 문제가 * 해결되지 않은 경우 샘플 코드 및 추가 정보로 질문을 업데이트하십시오. –

답변

1

이 시도 :

Process[] p = Process.GetProcessesByName("osk"); 
foreach (var item in p) 
{ 
    item.Kill(); 
} 
0

에게 그 이유를 닫으려면 프로세스

private void StartChildProcess(string fileName) 
    { 
     Process newProcess = new Process(); 
     newProcess.StartInfo = new ProcessStartInfo(fileName); ; 
     newProcess.Start(); 
     localProcess.Push(newProcess); 
    } 

를 실행하려면 두 번째 응용 프로그램은 다른 별도의 프로세스로 실행됩니다.

System.Diagnostics.Process으로 다른 프로세스를 실행하면 수동으로 종료 될 때까지 또는 작업이 완료 될 때까지 백그라운드에 남아 있습니다.

+0

이 생성되어 닫힙니다. – Abhishek

0

이 프로세스를 시도하십시오. proc = Process.GetProcessesByName ("processname"); proc.Kill();

+1

'죽이기 '는 프로세스를 강제 종료합니다. 이것은 당신이 원하는 것이 아닐 가능성이 큽니다. 'CloseMainWindow'가 더 나은 선택이 될 것입니다. –

+0

사실, 내 응용 프로그램에서 osk.exe를 실행하려고하고 있지만 닫으려고하지만 할 수 없습니다. 같은 것을 할 수있는 방법이 있습니까? – Abhishek

+0

어떻게 닫으시겠습니까? –

1

일부 옵션 :

  • 설정 종료에 다른 응용 프로그램을 경고 할 수 메인 응용 프로그램 (일부 WCF 정보 또는 원격에서 읽어) 그래서
  • 가 do.shutdown 파일을 만들고하자 일부 통신 시스템 두 번째 응용 프로그램 검사가 해당 파일이 있으면 간단하지만 효율적입니다. P/호출 -
  • 사용 process.Kill 옵션
  • 사용 Sendkey 또는 동등한은 '종료'키 조합을
+0

이것은 wcf 응용 프로그램이 아니며 단순한 winform 응용 프로그램입니다. – Abhishek

+0

Wcf는 winform 응용 프로그램에 추가 할 수있는 라이브러리 일 뿐이므로 Wcf 메시지를 종료하도록 대상 응용 프로그램을 변경해야합니다. 나는 Sendkey 또는 그와 동등한 것이 'best'옵션이라고 생각한다. – CodingBarfield

+0

고마워,하지만 난 완전히 윈도우 응용 프로그램 개발에 새로운 오전, 나는 웹 개발자 thats이 문제에 직면 오전. 나는 wcf에 대해 모른다. – Abhishek

1

사용하는 Windows API를 보낼 수 있습니다. 창 핸들을 얻으려면 FindWindow() 또는 EnumWindows(). 그런 다음 WM_CLOSE 또는 WM_QUIT을 보내어 SendMessage() 함수를 통해 응용 프로그램을 끝낼 수 있습니다.

참고 종료에 대한 사용자 입력에 대한 응용 프로그램 검사 (MessageBox에 같은 사용자가 정말 그만두고 싶은 날씨를 요구하는) 경우 유일한 옵션은 데이터를 일으키는 적어도 측면에서 Process.Kill (에 해당하는 것 WM_DESTROY을 보낼 수 있습니다 것을 손실 - 절대적인 동등한 것인지 확신 할 수 없음).

관련 문제