私はお互いに矛盾する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を閉じるのを助けることができるアイディアや解決策があれば、大歓迎です。
問題を確実に再現する良い[mcve]なしであなたの質問に答えることはできません。これには、タスクスケジューラタスクの設定方法(タスクをインストールする_code_が望ましい)に関する詳細情報が含まれます。しかし、この問題は、コンソールプログラムが実行されるユーザーアカウント、およびそのプログラムがどのプロセスを見たり終了したりすることができるかに関係していることはほぼ確実です。 –
コンソールとWPFプログラムの両方にロギングを追加すると、それぞれの操作に関連するもの(どのプロセスが返されたか、 'WM_CLOSE'メッセージが受信されたかなど)を報告できるので、 –