web-dev-qa-db-ja.com

タスクスケジューラ:起動時にセッションにログインしてデスクトップアプリを起動しますか?

問題:

私はWindows 2008 R2を持っていますVMサードパーティを実行するERPシステム。彼らはOracleデータベースとそのアプリをバックアップするためにスケジュールされたジョブを実行するユーティリティを持っています7日間のローテーションで毎晩データを収集します。

問題は、セッション内でインタラクティブにデスクトップアプリとして実行する必要があることです。サービスとして実行することはできません。アカウントをログインしたままにすることにわくわくすることはありませんが、許可することを学びました。ここでの主な問題は、サーバーが再起動された場合、アプリを開いた状態でアカウントがサーバーにログインしなくなったことに気付くまでに数日かかる可能性があることです。

質問:

ユーザーをVM(セッションの作成)にログオンし、そのセッションのデスクトップでアプリを起動する、起動時に実行されるタスクを作成できますか(その場合、どのように)?

[〜#〜]または[〜#〜]

これが難しすぎる、または不可能である場合、誰かがこのアプリがそのアカウントのセッションで実行されているかどうかを確認して確認する方法、およびアラートを送信しない場合のアイデアを得ましたか?カスタムのイベントログエラーでさえ、リモートモニタリングを通じてそれを取得できるので、私はクールです。

5
TheCleaner

プログラムはUIを表示する必要があり、非対話的に実行することはできないと思います。 (私はソフトウェアのこれらの「宝石」が大好きです...)

これが私が個人的にすることです:

  • アプリケーションを実行するユーザーとして AutoAdminLogon を使用してサーバーコンピューターを構成します。これにより、サーバーのコンソールが起動時にこのユーザーとして自動的にログオンします。

  • 自動ログオンユーザーの個人的な「スタートアップ」グループにスクリプトを追加して、タスクを非同期で開始し、存在するタスクのプロセスリストを監視し(個人的にはWMIC PROCESS LISTを使用します)、タスクがプロセスから欠落した場合に警告しますリストし、必要に応じてプロセスを再起動します。ワークステーションもロックします。

Startupグループのスクリプトは、次のように単純にすることができます(eqalert.exeを実行する必要があるプログラムを呼び出す):

@echo off
:restart
start "" "C:\Program Files\EQFU\EQWin32\eqalert.exe"
:check_loop
rem Delay 30 seconds between checks
ping -n 30 127.0.0.1 >NUL 2>NUL
wmic process list | find /i "eqalert.exe" >NUL 2>NUL
if not errorlevel 1 goto check_loop
echo eqalert.exe not running - restarting
eventcreate /T ERROR /ID 1 /L APPLICATION /D "eqalert.exe not running - restarting"
goto restart

このスクリプトは、実行中のタスクのインスタンスが1つだけ存在することを想定しており、プロセスリストでタスクの存在を確認するだけです。プロセスがハングするか、そうでなければ死ぬ場合、このスクリプトはそれをキャッチしません。 (プログラムがWindowsに「応答」しているかどうか、つまりそのメッセージポンプがまだerm_ pumping--であるかどうかの監視は、より複雑な見通しです。)

8
Evan Anderson

最初に、本当にインタラクティブなセッションが必要ですか?プロパティを設定すれば、スケジュールされたタスク内で実際に実行できる可能性があります。

さて、上記が不可能/実用的/許可されていないと仮定します:

VMが自動的にユーザーにログインするように設定できます。プロセスは here で説明されていますが、重要な点は次のとおりです。

  • RegeditでHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogonを開く
  • レジストリエントリを2つ作成しますDefaultUserName andDefaultpassword`
  • AutoAdminLogonentryを編集し、1に設定します

(または、ダウンロードして使用することもできます AutoLogon

潜在的な問題はここで確認できると思いますので、詳しくは説明しません。

2番目のリクエストは、バッチで行うのはかなり簡単です。 blat を使用するサンプルを次に示します。

tasklist | find "myprocess.exe"
if %ERRORLEVEL%==1  blat tasknotrunning.txt -to [email protected]

代わりにイベントログを使用する場合は、次のように組み込みの eventcreate コマンドを使用できます。

tasklist | find "myprocess.exe"
if %ERRORLEVEL%==1  eventcreate.exe /L APPLICATION /ID 911 /D “task XXX is not running” /T INFORMATION

(ここではイベントIDとして911を選択しましたが、他のものと競合しない限り、適切と思われるものを使用できます)。

3
Stephane

それらには、スケジュールされたジョブを実行してOracleデータベースとそのアプリデータをバックアップするユーティリティがあります。

それがすべてのタスクを実行している場合、Oracleデータベースをバックアップする他の方法があります。他のアプリデータについてもおっしゃっていましたが、個別に取得できると思います。すでに他のサービスに使用している可能性がある、BackUp Exec、Barracuda、Acronisなどのより一般的なバックアップツールが同じ目標を達成できるかどうかを調べましたか?このツールは、他の方法では実際のバックアップソリューションがない可能性がある小規模なお客様を対象とするようです。

0
Joel Coel