2013-03-21 3 views
0

WPF 응용 프로그램을 개발하는 동안 비대화 형 방식으로 응용 프로그램 실행을 중단하려했습니다. 이 응용 프로그램은 사용자가 Windows 클러스터에 작업을 제출하고 실수로 UI 코드를 제출하는 환경에서 사용됩니다. 이러한 인스턴스는 누군가가 자신의 존재를 인식하고 프로세스를 종료 할 때까지 서버에서 실행됩니다. 윈도우 7 작업 스케줄러와WPF 응용 프로그램이 비 대화식으로 실행되는 것을 어떻게 중단합니까?

private void Application_Startup (object sender, StartupEventArgs e) 
{ 
    if (Environment.UserInteractive) 
    { 
     var window = new MainWindow(); 
     window.Show(); 
    } 
} 

빠른 검사 : 여러 질문 (#1, #2, #3)에 대한 답변에서 조언에 따라

, 나는 비 대화식 사용을 중단 Environment.UserInteractive을 사용하여 다음과 같은 코드를 구현 그 과정은 여전히 ​​활동적이라는 것을 알았습니다! 작업이 로그인했는지 여부에 관계없이 작업이 실행되도록 설정되었으므로 어디에도 Window가 표시되지 않으며 Environment.UserInteractivetrue을 반환했는지 확실하지 않습니다.

그렇다면 WPF 응용 프로그램이 비 대화식으로 실행되고 있음을 어떻게 감지합니까?

답변

0

분명히 조언이 정확했으며 이고 false입니다. 그러나 WPF 발송자는 창 존재 여부에 관계없이 계속되었습니다.

응용 프로그램은 ApplicationShutdown 메서드를 호출 할 경우에만 실행을 중지 : 당신이 Application.ShutdownMode의 발언을 읽을 때 명백하게된다. 종료는 ShutdownMode 등록 정보의 값에 의해 지정된대로 내재적으로 또는 명시 적으로 발생할 수 있습니다.

실제로 비대화 형으로 실행되는 WPF 프로세스를 중지하려면 실행을 중지하도록 지시해야합니다!

if (Environment.UserInteractive) 
{ 
    var window = new MainWindow(); 
    window.Show(); 
} 
else 
{ 
    // This step is important, otherwise the application will continue running 
    this.Shutdown(1); 
} 

당신이 Application.Shutdown에 전화를 추가하면 비 대화식으로 실행할 때, 프로세스가 좋은 방식으로 해체됩니다!

작업 스케줄러 성공적으로 완료 작업 "\ RunTest"예 "{0d4e6506-b12b-4181-8a75-17754ddef81c} ', 액션 리턴 코드 1"Executable.exe을 \하는 \\ networkshare \ 경로 \ ".

관련 문제