最近のバージョンのWindowsでTaskSchedulerを介してタスクを開始する場合、タスクが「ユーザーがログオンしているかどうかに関係なく実行」されると、タスクはインタラクティブに実行されないこと、つまりUIが開始されないことはよく知られています。
参考までに、これはMicrosoftによるものであり、このSuperUserの質問とこのStackOverflowの質問で強調表示されています。
タスクの実行がスケジュールされているアカウントが、タスクのトリガー時にログオンしていない場合でも、タスクを実行するように指定できます。これを行うには、ユーザーがログオンしているかどうかに関係なく、「実行」というラベルの付いたラジオボタンを選択します。このラジオボタンを選択すると、タスクはインタラクティブに実行されません。タスクをインタラクティブに実行するには、[ユーザーがログオンしているときにのみ実行する]ラジオボタンを選択します。
しかし、私の問題はこれから派生したものです。
TaskSchedulerによって開始されるタスクは、プロセスを実行するように指示できるJavaクライアントアプリケーションです。これらは、クライアントアプリケーションのProcessBuilderを介して実行されます。そのため、このクライアントアプリケーションが非表示になっている/ UIを起動しないことは問題ありません。実際、UIはありません。
ただし、上記のように「ユーザーがログオンしているかどうかに関係なく実行する」ためにクライアントアプリケーションがTaskSchedulerを介して開始された場合、クライアントアプリケーションでProcessBuilderによって開始されたプロセスも、インタラクティブに実行できないか、UIを表示できません。クライアントによって開始されるプロセスの一部はUIアプリケーションであるため、これは問題です。
なぜそうなるのかわかりませんが、回避策があるかどうかを実際に解決しようとしています-たとえば、(非表示の)クライアントによって表示プロセスを開始するために追加できるいくつかの環境変数またはプロパティ。
何かご意見は?
したがって、私が見つけた回避策は、TaskSchedulerの使用を停止することでしたが、アプリケーションを起動するスクリプトを作成し、[スタート]メニュー> [プログラム]> [スタートアップ]フォルダーにそのスクリプトへのショートカットを追加しました。
HowToGeekに関するこの記事のクレジット:
Windows 7以前のバージョンのWindowsでは、これを簡単にするために、[スタート]メニューに[スタートアップ]フォルダーが含まれていました。
このフォルダーは、Windows 8、8.1、および10では簡単にアクセスできなくなりましたが、引き続きアクセスできます。アクセスするには、Windowsキー+ Rを押し、[ファイル名を指定して実行]ダイアログに「shell:startup」と入力して、Enterキーを押します。
「shell:startup」フォルダに追加したショートカットは、ユーザーアカウントでログインした場合にのみ起動します。ユーザーがログインするたびにショートカットを起動する場合は、代わりに[実行]ダイアログに「shell:commonstartup」と入力します。
ユーザーログインではなく、システムの起動時にアプリケーションを起動したいので、「shell:commonstartup」リンクを使用しました。
この方法で開始されたアプリケーション(私の場合は、この方法で開始されたアプリケーションによって開始されたアプリケーション)は、UIを介して表示および/またはインタラクティブになります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加