一部のファイルを準備し、プログラム(.exe
)を実行してから、上記のファイルを削除するバッチスクリプトがあります。
このタスクは1時間ごとに実行する必要があるため、スケジュールされたタスクを使用してこれを構成しようとしています。問題は、前述のプログラムがタスクから呼び出された場合(.bat
スクリプト経由でも、.exe
を直接呼び出した場合でも)正しく実行されないことですが、警告やエラーは表示されません。ログ内のメッセージ。
タスクは、すべての特権が適切に設定されているWindowsサービスアカウントとして実行するように構成されています。このアカウントを使用してRDP経由でログオンする場合、.bat
および.exe
を問題なく直接実行できますが、タスクは何もしないようです。これは、プログラムalwaysがファイルを変更し、変更されたonタイムスタンプがタスクを通じて変更されないため、簡単に確認できます。
スケジュールされたタスクログで、プロセスの開始、終了などの情報メッセージを取得します。ただし、「結果コード」は111
です(運良くこれをGoogleに試行したところ、取得される唯一の関連付けは "ファイル名が長すぎる」、これは完全に無関係なAFAIKです)。アプリケーションログに、まったく何も表示されません。
プログラムは古い怪物で、GUIは必要ないのに操作が不要で操作後に閉じるため、GUIは必要ありませんが、何らかのスプラッシュスクリーン(実際には通常のウィンドウです)を生成します。ウィンドウが約2秒間表示されます。
このGUIの要件は、タスクの失敗と関係があると思いますが、よくわかりません。タスクを実行するユーザー(RDP経由)でログインすると、スケジュールされたタスクを開始してもウィンドウが表示されません。
メインウィンドウなしでプログラムを起動する非常に小さなC#実行可能ファイルを作成しました(ProcessStartInfo.WindowStyle = ProcessWindowStyle.Hidden
を使用)。この方法でも、スケジュールされたタスクはプログラムを正しく起動できませんが、戻りコードは0
になりました。
「ユーザーがログオンしているかどうかにかかわらず実行する」というタスクを構成し、run with highest privileges
オプションがncheckedの場合、エラー値は2147943859
です。
トラブルシューティングするにはどうすればよいですか?
OS = Windows Server 2008 R2 SP1
さらに情報が必要な場合は、コメントでお知らせください。
顧客のサーバーを実行している会社の担当者は、GUIプログラムはスケジュールされたタスクを介して実行されることは決してないだろうと言っています。
彼らは、タスクスケジューリング機能も備えた監視システムを使用しています。彼らはそれを通してそれを設定しました、そしてそれはうまくいくようです。
ここでこれ以上の提案を評価する機会を得られなかったのは残念ですが、とにかく助けてくれてありがとう。将来的には他の人にも役立つことを期待しています。
あなたの問題は、タスクを実行するために使用されているアカウントの権限、またはタスクを実行しようとしたときに存在するアカウントのコンテキストに関係していると思います。
あなたの。EXEは、コンピューターのConsole
セッション(別名セッション0)で実行する必要がある可能性があります。これをテストするには:
QWINSTA
を実行し、SESSIONNAME
列を確認して、>
インジケーターがconsole
の横にあることを確認します。つまり、表示されるはずです。 >console
)としてタスクが正しく実行される場合は、SCHTASKS.EXE
パラメータを使用して /IT
でタスクをスケジュールしてみてください。それができない場合は、サービスユーザーアカウントとして自動的にログオンし、タスクをスタートアッププログラムとして実行するようにコンピューターを構成する以外に選択肢がない場合があります。
さらに、すでに提案したように、タスクの実行に使用されたアカウントに適切なアクセス許可が付与されていることを確認するには、以下を確認してください。
Computer Configuration/Windows Settings/Security Settings/Local Policies/User Rights Assignments
のローカルグループポリシーにあります)Effective Permissions
にあるファイル/フォルダーのPropertiesのSecurity > Advanced
タブを使用して確認しますバッチファイルにログを追加します。実行するすべての行の後で、出力がログファイルに書き込まれるようにして、行き詰まっている場所を確認します。例えば:
@echo off
echo Line 1 >> "C:\MyLog.txt"
"C:\My Folder\myOldProgram.exe"
echo Line 2 >> "C:\MyLog.txt"
DEL somefile.dat
echo Line 3 >> "C:\MyLog.txt"
。EXEをSTART
で実行してみてください(例:START "myTitle" "C:\full\path\to\my.EXE"
)
他の人の役に立つ場合に備えて、古い投稿に返信しています。同じ問題がありました。イベントログには、プログラムは正常に完了したと記載されていますが、コードの最初の行でさえログに書き込まれませんでした。タスクスケジューラの[開始]オプションになってしまいました。現在のディレクトリにいるときに、プログラムがコマンドラインから正常に実行されたことがわかりました。同じディレクトリにマニフェストファイルと他の依存関係があります。したがって、スケジュールされたジョブをEXEと同じディレクトリで開始するように指示すると、好ましい結果が得られる可能性があります。それが私の解決策でした。
多分これはあなたを助けますか?
同様の問題があり、あなたの唯一の解決策は自動ログインでサーバーに特別なアカウントを作成することでした。したがって、すでにログインしているユーザーの下でタスクが実行された場合、.exeはうまく機能しました...
これは非常に良い解決策ではないことを知っていますが、私たちにとっては、それが機能した唯一のものでした。これがうまくいくかどうかはわかりません...(しかし、この回避策では、ユーザーが本当に本当にログインしているかどうかを確認する必要があります...)
Windows 2008 R2サーバーでタスクスケジューラを使用して古いVB6プログラムを起動しようとしました。アプリケーションは、バッチファイルまたはショートカットをクリックしてexeから実行されますが、タスクスケジューラからは実行されません。 C:\ program files(x86)ディレクトリのアプリケーションフォルダーに保存されているアプリケーションの構成ファイルが、c:\ programdataのアプリケーションフォルダーにコピーされたことがわかりました。スケジューラは機能しました。 cmd.exeは、別の場所の設定をタスクスケジューラが使用する場所に適用しているようです。アプリケーションに構成ファイルがある場合は、それらをc:\ programdata\applicationフォルダーに移動してみてください。
たぶんこの質問への答えは、このスレッドを読んでいる誰かを助けるでしょうか?
https://stackoverflow.com/questions/32589381/
概要:Windows 2012のスケジュールされたタスクはnotタスクが設定されているアカウントについて、PATH
を含む正しい環境変数を表示しますとして実行する。
私が上記のことを理解する前に、私はこれらすべてをかなり長い間読み通しました。 (これは私自身の問題であり、OPの質問と同じです。)
(最終的に!)これを知ったら、それを(stackoverflowの回答に従って)テストし、その発生を確認し、回避することは非常に簡単です。
スクリプトまたはプログラムでマップされたネットワークドライブを参照していますか?しばらく前に、スケジュールされたタスクが実行されないという同様の問題があり、その理由を理解できませんでした。パスをUNCパスに変更すると解決しました。
変化する T:\Apps\MyProgram.exe
〜\\MyServer\MyShare\Apps\MyProgram.exe
"ユーザーがログオンしているかどうかにかかわらず実行する"というタスクを構成し、[最高の特権で実行する]オプションがオフになっていると、エラー値は2147943859になります。
2147943859を16進数に変換すると800705b3になり、Googleにすばやく移動すると、「コンピューターでインストールプログラムを開始できませんでした。この操作には対話型のウィンドウステーションが必要です」と通知されます。
今、PSEXEC(Sysinternalsから)を使用せずにインタラクティブに実行する方法があるかもしれませんが、PSEXECを介して実行する方法はすでに知っているので、これを使用します。
PSExec: http://technet.Microsoft.com/en-us/sysinternals/bb897553.aspx
したがって、すべての前にpsexec.exe -i(および昇格が必要な場合は-h)を前に付けるようにアクションを変更すると、動作するはずです。
私はこれをWindows Server 2008 R2 SP1で試しました。
c:\windows\system32\cmd.exe
そしてパラメータ:
/c psexec.exe -h -i notepad.exe
タスクを手動で実行すると(スケジュールがないため)、現在のセッションで管理者特権のメモ帳が実行されます。