2012-05-11 12 views
3

Windowsでバッククックを使用してプログラムを呼び出すPerlスクリプトがあります。コマンドプロンプトで実行するとうまく動作します。私はWindowsのタスクスケジューラを使用してそれを実行すると動作を停止します。これはActiveState Perlを使用したWindows Server 2008 x64上にあります。それは私にエラーが内部または外部のコマンド、操作可能なプログラムまたはバッチファイルとして認識されていない私に与えます。プログラムの完全なパスを指すようにプログラムへの呼び出しを変更すると、再び機能します。Windowsタスクスケジューラを介して実行されるPerlスクリプトから生成されたプロセスは、%PATH%にアクセスできない%PATH%

backticksを含むタスクスケジュールで実行されると、Windows環境変数、特に実行時の%PATH%変数が表示されなくなります。バックティックによって生成されたシェルから何かが欠落している可能性がありますか?別のコマンドを使用してシステムコールを実行する必要がありますか?または、これを解決するタスクスケジューラ設定がありますか?誰かが助けることができるなら、私はそれを感謝します。

私の環境はこれより複雑ですが、これは私がそれを絞り込んだものです。私は実際には、それ自体がプログラムを実行するperlスクリプトを実行するPHPスクリプトを実行するバッチファイルでタスクスケジュールを持っています。私が言及しなかったスタックの残りの部分は%PATH%にアクセスできるように見えるので、バッチファイルは 'php ...'を実行し、phpスクリプトは 'perl ...'を実行し、その後perlスクリプトは失敗しますbackticksを使って 'programname'を実行しているとき。私はバッチファイルとPHPスクリプトを取り除きましたが、動作はまだタスクスケジューラとperlだけで残っています。

+1

に役立ちます:あなたがPATHに設定されて正確に何を見ることができるように同じコンテキストで\ logfile.txt'。 –

+0

ティーン。[Unixの人はこれのように常に問題がある](http://stackoverflow.com/questions/6141708/shell-script-runs-from-command-line-not-cron) – mob

+0

@mob Unixかどうか、私は人々を願っています誰がスケジュールされたタスクを開始するかを設定している* Perlスクリプト*を実行するPHPスクリプトを実行するバッチファイル*真剣に、ねえ、何?ここには多くの動く部分があります。 –

答えて

2

perlからの実行パスは、基本的に私が問題を解決するのに役立ちました。問題はperl自体ではありませんが、タスクスケジューラーサービスが再開されるまで、%PATH%変数の変更がタスクスケジューラーに表示されないという事実があります。私が知る限り、マシンを再起動せずにタスクスケジューラを再起動する方法はありません。そのため、プログラムスケジュールはタスクスケジュールで実行されても表示されず、コマンドラインに表示されていました。

これには2つの解決策があります。

1つは、マシンを再起動することです。

2番目は、タスクスケジュールが「ユーザーがログインしているかどうかを実行する」に設定されていることを確認することです(そのオプションに最も近いコマンドラインパラメータは、schtasksの/ NPパラメータです)。そのシナリオでは、現在の%PATH%変数にアクセスできます。私は確信していませんが、私はこれがデスクトップと対話する必要があるスクリプトを破ると思う。

0

管理者権限がある場合は、システムワイド%PATH%を定義できます。ユーザーの%PATH%がそれを補う。ユーザーアカウントでシステム上で実行されている通常のプログラムでは、システム全体が%PATH%であることがわかります。

GUIからタスクをスケジューリングしたか、ATを使用したかはわかりませんが、Scheduled Jobs Cannot Access User Environment Variablesが役に立ちます。

+0

私はこの場合の%PATH%はシステム全体の%PATH%だと思います。スケジュールは管理者アカウントとして実行されていたので、それはどうにも関係しませんでした。タスクはschtasksを使用してスケジュールされました。 – TinyGrasshopper

0

私はこの同じ、または少なくとも類似の問題に遭遇しました。私は調査の詳細をあなたに惜しまない。その解決策は、UATが途中で止まっていたことでした。

私はWindows 7マシンにローカル管理者権限を持っています。管理ツール>ローカルセキュリティポリシー>セキュリティオプションとENABLEユーザーアカウント制御:すべての管理者を管理者承認モードで実行する必要がありました。再起動してください。私のスクリプトはタスクスケジューラで実行されるようになりました。

・ホープこれはあなたのPerlスクリプトは、パス> C `を実行するには、Get

+0

このオプションはデフォルトで有効になっています。以前に無効にしていましたか? –

関連する問題