두 프로그램이 서로 충돌합니다. 그 중 하나는 한밤중에 Task Scheduler (Program1)에 의해 시작되는 C# 콘솔 응용 프로그램이며 다른 하나 (Program2)는 일반적으로 하루 동안 사용자가 실행하는 C# WPF 프로그램입니다. 나는 프로그램 1에서이 program2를 종료하려면 다음을 사용하려고 : 프로그램 1은 TaskScheduler에서 실행될 때TaskScheduler에서 실행할 때 찾기/닫기 프로세스는 어떻게됩니까?
어떤 이유public static void CloseProgram2()
{
var process = System.Diagnostics.Process.GetProcessesByName("Program2").FirstOrDefault();
if (process != null)
{
if (process.CloseMainWindow())
{
SpinWait.SpinUntil(() => null == System.Diagnostics.Process.GetProcessesByName("Program2").FirstOrDefault(),
TimeSpan.FromSeconds(30));
}
}
}
, program2에 종료되지 않습니다. 그러나 Program1을 수동으로 실행하면 항상 Program2가 종료됩니다. 누군가 컴퓨터에 로그인되어 있는지 여부와 상관없이 Program1이 실행되도록 작업 스케줄러에서 자격 증명을 제공하도록 설정했습니다. 작업 스케줄러에서 실행 중일 때 Program1의 출력 창이 표시되지 않지만 성공적으로 실행됩니다. 아마도 Task Scheduler가 Task Scheduler에서 시작하지 않은 프로세스를 볼 수 없도록 Program1을 실행하고 있는지, 그리고 Program2가 종료되지 않은 이유가 궁금합니다.
Program1이 TaskScheduler를 사용하여 실행될 때 Program2를 닫을 수있는 아이디어 나 솔루션은 크게 감사하겠습니다.
안정적으로 문제를 재연하는 좋은 [mcve] 없이는 질문에 대답 할 수 없습니다. 여기에는 작업 스케줄러 작업이 설정되는 방법에 대한 _exact_ 세부 정보가 포함됩니다 (작업을 설치하는 _code_가 바람직 함). 그러나이 문제는 콘솔 프로그램이 실행되는 사용자 계정과 관련이 있으며 프로그램이 처리 및/또는 종료 할 수있는 프로세스와 관련이있는 것으로 거의 확실합니다. –
콘솔과 WPF 프로그램 모두에 로깅을 추가하여 각각이 자신의 작업과 관련된 것들 (반환되는 프로세스, 'WM_CLOSE'메시지 수신 여부 등)을보고 할 수 있도록하면이 문제를보다 효과적으로 디버깅 할 수 있습니다. –