WindowsXPや 2003Server には Windowsのタスク(スケジュール)を制御するコマンドが追加されていて、
schtasks /Run /TN タスク名
とすることで、登録されているタスクを即実行できたりします。
ついでに
schtasks /Run /S マシン名 /U ユーザー名 /P パスワード /TN タスク名
とすることで、別のマシンに登録しているタスクをリモート呼び出ししたりもできます。
これをうまいこと使うと、例えば特に定期スケジュールを組んでいないタスクを
実行するユーザーを administrator なんかで登録しておくだけで、
他のマシンに何かを処理依頼したり、
呼び出しをするユーザーと実行するユーザーとの権限を分離できたりするわけです。
impersonateを考えるよりよっぽど直感的ではありますまいか。
しかし、困ったことが2つあって、
すでに起動中のタスクを再度キックした場合、見た目には「既に実行中」というメッセージが出るものの、
コマンドの戻り値は正常と同じ 0が返ってきてしまいます。プログラムの内部に組み込むには少々クセものです。
また、タスクを起動する(呼び出し元の)ユーザーは本来 Backup Operatorsグループ等に所属していれば良いはずなのですが、
実際には Administratorsグループに所属していないと「アクセスが拒否」されてしまうような気がします。
(調べる限り、タスク自体のセキュリティの権限を呼び出し元ユーザーに許可したり、
ローカルセキュリティポリシーのユーザー権利の割り当てで、Administratorsグループが設定
されている箇所全てに呼び出しユーザーを追加してもダメでした)
権限分離といっても呼び出し元には最低限 Administratorsグループの権限が必要になってくるのかも?
んんん・・・。いまひとつ。