web-dev-qa-db-ja.com

最小化されたタスクスケジューラからサービスを開始する

このスーパーユーザーの質問 に従ってスケジュールされたタスクを作成した後、UACプロンプトなしでサービスを正常に開始できます。選択したオプションは次のとおりです。

  • _Start a program_
  • _Program\script_ = _C:\Windows\System32\net.exe_
  • Add arguments (optional) = _start "SERVICE-NAME"_

次に、バッチファイルで_schtasks /run /tn TASK-NAME_を呼び出します。これをテストした後、バッチファイルへのショートカットを作成し、RunオプションをMinimisedに設定しました。

これは、実際のサービスが開始されたときに最大化されたコマンドプロンプトウィンドウが単一行_The SERVICE-NAME service is starting_でポップアップすることを除いて、すべて機能します。これは、数秒後に消えます。

ポップアップなしでサイレント(または最小化)にターゲットプログラムを開始するようにタスクスケジューラに指示するにはどうすればよいですか?ポップアップコマンドプロンプトが最小化されていれば問題ありません。

5
AlainD

問題は、ショートカットを最小化して実行するように構成すると、タスクが実行するプログラムではなく、スケジュールされたタスクを開始するプログラムのみを最小化して起動することです。 Rube Goldbergマシンの起動シーケンスに別のピースが必要な場合は、次の変更を加えます。

  • _Program\script_ = _C:\Windows\System32\cmd.exe_
  • Add arguments (optional) = _/c start /min net start "SERVICE-NAME"_

最初の「開始」は、2つの関数に使用する_cmd.exe_ startコマンドです。

  1. _net.exe_を最小化して起動します。
  2. _taskeng.exe_が終了するのを待つのではなく、起動するとすぐに_net.exe_を終了します。

_taskeng.exe_が起動するまで_net.exe_が短時間点滅するため、このソリューションは完全ではありませんが、通常は1秒未満です。

4

ウィンドウをまったく点滅させずにサービス(または他のプログラム)を開始できます最小化されていなくても

タスクを作成します。

  • コマンド/スクリプト:_mshta.exe_
  • 引数を追加(オプション):
    "javascript: new ActiveXObject('Shell.application').ShellExecute('net.exe', 'start <SERVICE-NAME>', '', 'open', 0); close();"

サービスを開始するには管理者権限が必要なので、最初のタブで最高の権限で実行をオンにします。

ウィンドウを表示せずにタスクを実行するには、同じトリックを使用します。次のコマンドでショートカットを作成します。

_mshta.exe "javascript: new ActiveXObject('Shell.application').ShellExecute('schtasks.exe', '/run /tn <TASK-NAME>', '', 'open', 0); close();"
_

ノート

  • 通常のユーザーは自分のタスクしか実行できず、このタスクは最高の権限を持つタスクであるため、ショートカットを実行するユーザーは管理者である必要があります。そうでない場合、schtasksコマンドは「アクセスが拒否されました」で失敗します。
  • タスクがタスクフォルダーにある場合、_/tn <TASK-NAME>_はシェルからの_/tn <FOLDER>\<TASK>_であり、mshtaコマンドでエスケープするにはバックスラッシュを2つする必要がありますショートカットの。
  • 一部のウイルス対策プログラム(少なくともKaspersky)は、このようにmshtaを使用するタスクを疑わしいまたは潜在的なリスクと見なして削除する場合があります。
  • このトリックを使用すると、ポップアップすることなく、隠されたプログラムを実行できます。 _net.exe_をプログラムの名前で置き換え、_start <SERVICE-NAME>_の部分を必要なパラメーターで置き換えるだけです。
0
cdlvcdlv