・・・Windowsの[タスクスケジューラ]にタスクを登録するTipsは、GUIを用いる場合同様に多い。
■ しかし、
コマンドラインのみで
指定したアプリケーションの起動をキーに、
スケジュールを開始し、指定時間だけ遅延させて 指定プログラムを実行させる。 |
と云った定義を行うケースで、適合する内容は皆無に近かった。 |
■ ソコで、
ここでは 試行した例で ざっくり紹介するコトに。
◆ トリガー後、5min遅延して開始。
Schtasks /create /f /it /sc onevent /rl highest /tn "PSO2yomiD5" /tr "'C:\Program Files (Free)\StreamingSet\PSO2yomi\PSO2yomi.exe'" /ec Application /mo *[System[Provider[@Name='pso2.exe']]] /delay 0005:00
◆ 遅延指定ナシ。
Schtasks /create /f /it /sc onevent /rl highest /tn "PSO2yomi" /tr "'C:\Program Files (Free)\StreamingSet\PSO2yomi\PSO2yomi.exe'" /ec Application /mo *[System[Provider[@Name='pso2.exe']]] |
pso2.exe が 起動されたら、5min後に PSO2yomiを開始する と云うスケジュールを登録する為の指定を模索した結果だ。
タスクスケジューラへの登録は、概ねこれで完結出来ている。
しかし、pso2.exeが "起動をイベントとして返さない" 為、予定していた用途としては動作しなかったが・・・ |
◆ Schtasksコマンドへの パラメータを詳細を解説すると・・・
/create - タスク作成。
/f - 既存エラーを返さず強制上書き。
/it - ユーザーがログオンしている場合のみ実行。
/sc onevent - トリガーで[イベント]を選択。
/rl highest - 最上位の特権でタスクを実行。
/tn "PSO2yomiD5" - スケジュールの名前。
"AnyFolderName\PSO2yomiD5" のような形式で 階層化指定も可能。
/tr "'C:\Program Files (Free)\StreamingSet\PSO2yomi\PSO2yomi.exe'"
実行させたいアプリケーションのフルパスを指定する。
/ec Application - トリガー[イベント時]-[基本]-[ログ]-[アプリケーション]を選択した状態に。
/mo *[System[Provider[@Name='pso2.exe']]]
@Name=に続く 'pso2.exe' の部分で、スケジュールのトリガーとなるアプリケーションの
プロセス名を指定。
ココに指定したアプリケーションからの 起動イベントが検出されたら、スケジュールを開始する。
/delay 0005:00 - この記述で 5min・・・ 同様の書式で、スケジュールがトリガーされてから、
[実行を指定されているアプリケーションを開始するまでの時間] を指定。
/delayは省略可能で、その場合はトリガー後、即実行扱いとなる。 |
コンなカンジ。
このような記述で、
[タスクスケジューラ]に 登録されるスケジュールの設定画面のうち、[全般] [トリガー] [操作] 各タブは 設定制御出来る。
だが、[条件] と [設定] については、数多あるTipsサイトの情報を併読したとしても定義不能な項目もあり、該当パラメーターを調査中。 |
■ 尚・・・
上述の通り、この方法で登録したスケジュールは多くのアプリケーションで機能しない。
◆ 原因は、
殆どの一般アプリケーションは、Windowsに対して "イベントを返さない" 構造であるコトに尽きる。
そもそも、/sc onevent 指定、"トリガーとして[イベント]を利用する" 登録でのキモは、
任意に指定したアプリケーションが
イベントを返す・・・ イベントログに対して "起動などを報告する(書き込む)" かどうかである。
因って、
イベントログに該当する変化のナイ殆どのアプリケーションでは、ソレを検出して動作する /sc onevent を用いても、
トリガーとして機能するコトはナイ と云うワケだ。 |
★ しかし、このタイプのタスクスケジューラへ登録は、UACナシでの起動を実現したい場合には有用である。
schtasks.exeは、スケジュール登録だけを行うコマンドではナイ、登録済みスケジュールを実行させる用途でも用いる。
以下のような内容でショートカットを作成すると、
schtasks /Run /TN PSO2yomi |
クリックするだけで スケジュールが 前述のコマンドラインから設定した通り [最高権限]で実行される。
これでUACの確認画面は出ない。
しかし、一瞬プロンプトが表示されてしまう・・・ schtasksを実行している画面だ。
これをショートカットからの起動で非表示にしたい場合は、
ショートカットのプロパティで [実行時の大きさ] で [最小化] を 選択しておくと良い。 |
|
◆ 当然VBScriptからの利用でも、
・・・UAC非表示で実行可能だ。
Dim My, ShApp
Set My = WScript
With My
Set ShApp = .CreateObject("Shell.Application")
End With
Const schtasks = "C:\Windows\System32\schtasks.exe"
ShApp.ShellExecute schtasks, "/Run /TN PSO2yomi", "", "", 0
Set ShApp = Nothing
My.Quit |
このように .ShellExecute の 最終引数で 0 [ウィンドウ非表示]を指定しているのだが、
コレは schtasks.exe の実行を非表示にするモノであり、その後に起動されるアプリケーションは、
元々のウィンドウ状態で起動すると云うのが、この用法でのポイントだろう。 |
◆ 但し、
schtasks.exe /Run を用いた場合は、"トリガーで起動していない" 為、
トリガー後に対する遅延起動指定である /delay で設定された待機は実施されない点に注意が必要だ。
従って、対象のアプリケーション起動まで 任意の待機時間を設定したいのであれば、
Dim My, ShApp
Set My = WScript
With My
Set ShApp = .CreateObject("Shell.Application")
End With
Const schtasks = "C:\Windows\System32\schtasks.exe"
My.Sleep 300000
ShApp.ShellExecute schtasks, "/Run /TN PSO2yomi", "", "", 0
Set ShApp = Nothing
My.Quit |
VBScriptで sleep を事前に配置するなどして、対処するしかない。 |
|
■ もし、
◆ フリーアプリケーションを提供されていて、UAC起因でお困りなら、以下のように、
.batファイル (.ShellExecuteでなら パラメータで カレントディレクトリを別途指定して) に、
Schtasks /create /f /it /sc onevent /rl highest /tn "\" /tr "'%~d0%~p0'" /ec Application /mo *[System[Provider[@Name='dummy.exe']]] |
%~d0%~p0 は、実行した.batファイルのルートフォルダを著す文字列として扱われる。 |
・・・ないし、
実行させたいアプリケーションへパラメータを付与したい場合は、
Schtasks /create /f /it /sc onevent /rl highest /tn "\" /tr "'%~d0%~p0' " /ec Application /mo *[System[Provider[@Name='dummy.exe']]] |
・・・このようにSchtasksを記述しておいて、 |
実行したいファイルと同じ場所に設置、 |
このバッチファイルを実行すると スケジュールが適宜登録される。
◆ このスケジュールを
・・・起動する 以下のような ショートカットを作成しておき、
デスクトップにレイアウトするよう インストールアーカイブを構成すれば良いだろう。 |
★ この方法なら、
ドコにアプリケーションをレイアウトしても、
スケジューラの値さえ正しければ、デスクトップショートカットの内容は固定で良いのも利点だ。 |
|
|
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。