2016-11-22 43 views
0

WindowsでスケジュールされたタスクとしてC#コンソールプログラムを実行しています。このプログラム自体は、プログラム自体が終了したときに正常にシャットダウンする必要のある「タスク」をたくさん実行します。スケジュールされたタスクが終了したときにコードを実行する方法

スケジュールされたタスクが終了したときにクリーンアップコードを実行する方法がありますか(2〜2秒かかる場合がありますか)。たとえば、PowerShellスクリプトからStop-ScheduledTaskを呼び出すことで終了します。

AppDomainのイベントを捕捉するだけでなく、ProcessExitイベントを捕まえようとしましたが、スケジュールされたタスクが終了したときにこれらのイベントが呼び出されることはありません。

コメントの中でrrirowerで概要を説明したように、別のオプションとして、プロセスに信号を送信して終了するように指示することもできますが、これはWindowsではうまくサポートされていないようです。

+2

スクリプトがクリーンアップコードを実行できない理由は何ですか? – rrirower

+0

プロセスにシグナルを送る方法があれば、それは私が調査しているもう一つのオプションです(Windows上ではどうしたらいいのか分かりませんが、 'taskkill'は片道と思われます)。 –

+0

@Damithここでトリガーがどのように役立つかわからない... –

答えて

0
私はスケジュールされたタスクを終了する直前に、そのタスクを終了させることを依頼するプログラムのREST APIにHTTPクエリを作ることになった

:長期的に

Invoke-RestMethod -Method Post -Uri ("{0}/Application/TerminateAllTasks" -f $programUrl) 
$p = Get-Process "NameOfTheProcess" -ErrorAction Stop 
$task | Stop-ScheduledTask -ErrorAction Stop 
$p.WaitForExit() 

を、我々は変換されますプログラムを適切なWindowsサービスに適用すると、正常な終了が容易になります。

関連する問題