2017-09-05 5 views
1

私はお互いに矛盾する2つのプログラムを持っています。そのうちの1つは、夜中にTask Scheduler(Program1)によって起動されるC#コンソールアプリケーションで、もう1つは通常、その日にユーザーによって実行されるC#WPFプログラムです。プログラム1はTaskSchedulerから実行されたときにプログラム2がシャットダウンしないいくつかの理由から、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)); 
     } 
    } 
} 

:私はプログラム1からプログラム2をシャットダウンするには、以下を使用しようとしました。しかし、Program1を手動で実行すると、常にProgram2がシャットダウンされます。誰かがコンピュータにログインしているかどうかに関係なく、Program1が実行されるように資格情報を提供するようにタスクスケジューラを設定しました。私は、タスクスケジューラから実行されている間、Program1の出力ウィンドウが表示されないが、正常に実行されることに気付きました。タスクスケジューラがTask1によって起動されていないプロセスを表示しないように、タスクスケジューラがProgram1を実行している場合、Program2がシャットダウンされないのはなぜですか?

Program1がTaskSchedulerを使用して実行されているときに私がProgram1を閉じるのを助けることができるアイディアや解決策があれば、大歓迎です。

+0

問題を確実に再現する良い[mcve]なしであなたの質問に答えることはできません。これには、タスクスケジューラタスクの設定方法(タスクをインストールする_code_が望ましい)に関する詳細情報が含まれます。しかし、この問題は、コンソールプログラムが実行されるユーザーアカウント、およびそのプログラムがどのプロセスを見たり終了したりすることができるかに関係していることはほぼ確実です。 –

+0

コンソールとWPFプログラムの両方にロギングを追加すると、それぞれの操作に関連するもの(どのプロセスが返されたか、 'WM_CLOSE'メッセージが受信されたかなど)を報告できるので、 –

答えて

0

使用する別の解決策が見つかりました。代わりにproccess.CloseMainWindowを使用しての()私は、次のでバッチファイル作成:

taskkill /F /IM Program2.exe 

をそしてちょうどタスクスケジューラからのバッチファイルを実行しました。

私のバットファイルのtaskkillコマンドの前に空白行を置く必要があったのは変です。それがなければ、私は冗談の束を取得し、それはどのようにそのコマンドを実行するか分からないと言います。タスクスクイルコマンドの前にガベージが挿入されているかのように。非常に奇妙な...

関連する問題