- ベストアンサー
ブラウザからバッチ起動時のPathについて
- ブラウザから起動したバッチ上で環境変数のPathが使えない
- ブラウザから起動した場合には一部が正常に動作しない
- 正常に動作するには直接バッチを起動する必要がある
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
システムの環境変数 じゃなくて ユーザーの環境変数 に設定していませんか? サーブレットコンテナ?を起動しているユーザーで実行されると思いますので、そこら辺を確認なさってはいかがでしょうか? javaでSystem.getProperty("user.name")とやってjavaを起動しているユーザー名を取得してみるのもいいかもしれません。
その他の回答 (5)
- pcbeginner
- ベストアンサー率46% (261/560)
前に見たことがあるコードは (AIXでシェルの終了を待ってるんですけど。) int i; while(true){ try{ //終了コード取得 i = p.exitValue(); break; }catch(IllegalThreadStateException e){ //実行中→何もしない } } って感じで終了するのを待ってましたね。 これでどうでしょうか? (ってあまり行儀のいいコードじゃぁないと思いますが。)
お礼
すみません。 返事が遅くなりました。 これは、いけそうですね。 終了後にiの値をチェックすれば 問題ないと思われます。 とりあえず、移行時のPGですので サーブレットコンテナのサービスを Administratorで起動する方向で決まりそうです。 移行が完了したらSYSTEMで起動に変更します。 長々とお付き合いいただき有難うございました。 助かりました。
- pcbeginner
- ベストアンサー率46% (261/560)
自分の環境は XP SP2 Tomcat 4.1.31 J2SDK 1.4.2_07 Tomcatの起動方法は [スタート]→[プログラム]→[Apache Tomcat4.1]→[Start Tomcat] で起動しています。 簡単なサーブレットを作成して System.getProperty("user.name"); を出力したところ、「自分のユーザーアカウント名」が表示されました。 コントロールパネルでユーザーアカウントを起動するとユーザーは ・自分のユーザーアカウント ・Guest の2つしかありません。 >System.getProperty("user.name")で取得した >ユーザー名とはいったい何なのでしょう? javaのAPIには -------------------------------------------------- user.name ユーザのアカウント名 user.home ユーザのホームディレクトリ user.dir ユーザの現在の作業ディレクトリ -------------------------------------------------- と書いてあります。 普通にmainメソッドからシステムのプロパティを取得した場合も結果は同じでした。 >もし、SYSTEMというユーザーが存在するならば >Pathは空かもしれません。 現時点では↑の可能性が高いとしか言えないですね…。
お礼
長々とお付き合いいただいて恐縮です。 サーブレットはサービスで自動起動していました。 ログインはLocalSystemとなっていましたので、 デフォルトで存在する「SYSTEM」なるユーザーが起動を かけているようです。 バッチ内でPath=・・・としてAdministratorで切ってあるPathをそっくり設定して動作確認したところエラーは出なくなりましたが、バッチが固まるようになりました。 やはり、Pathが空だったようです。 固まる原因は不明ですが・・・。 有難うございます。m(_ _)m
補足
サーブレットのサービスをADMINISTRATORで起動したところ、正常動作を行いました。 ただし、javaからのバッチ起動を Prosess p = runtime.exec("C:\aaa.bat"); から Prosess p = runtime.exec("CMD /c start C:\aaa.bat"); として突き放し処理としています。 尚、 p.waitFor(); p.destroy(); とはしていますが、バッチ内にpauseをいれて 停止させても正常終了し、CMD.exeはタスクに 残ってしまいました。 やはり、サービスの起動ユーザーを変更しないと いけないのでしょうか?
- pcbeginner
- ベストアンサー率46% (261/560)
#1に補足します。 システムの環境変数 と ユーザーの環境変数 に 同じ変数名 が定義してあって、 別の値 が設定されている場合は ユーザーの環境変数 が優先されます。 例えば PATH という変数名に システムの環境変数:C:\Windows ユーザーの環境変数:C:\user とそれぞれ定義してある場合に echo %PATH% とすると C:\user が出力されます。 C:\Windows;C:\user でもなくて C:\user;C:\Windows でもないです。 ので >System.getProperty("user.name")で取得したユーザー名は[SYSTEM]と出力されました。 SYSTEMというユーザーの「ユーザーの環境変数」を見てはどうでしょう? もしかしたら PATH とだけ名前だけ定義してあって、中身は空なんてことに…
お礼
あるかもしれません。 早速、確認してみます。
補足
コンピューターの管理のユーザーにSYSTEMがありません・・・。 権限がSYSTEMということなのでしょうか? System.getProperty("user.name")で取得した ユーザー名とはいったい何なのでしょう? もし、SYSTEMというユーザーが存在するならば Pathは空かもしれません。
- pcbeginner
- ベストアンサー率46% (261/560)
>aaa.exeをフルパスで指定すると別のエラー >(~.dllが見つかりません) >となるのでやはりPathが読めてないと思われます。 絶対パスで指定しているのだから、pathは関係ないのでは? バッチファイルがあるディレクトリからの相対パスで実行しても同じでしょうか? あとは… サーブレットじゃなくて、mainメソッドのみで、バッチを実行するだけのjavaクラスから、簡単なバッチを実行してみてはいかがでしょうか? (もうアドバイスにすらなってなくて申し訳ありません…。)
お礼
有難うございます。 言葉足らずですみません。 別のエラー(~.dllがみつかりません)というのはaaa.exeがdllを呼び出そうとして出ているエラーと 思われます。フルパスを指定していないときはaaa.exeがみつかりません。というエラーでした。c:\Windows等がPathできられていないからだと思います。 >サーブレットじゃなくて、mainメソッドのみで、 >バッチを実行するだけのjavaクラスから、簡単 >なバッチを実行してみてはいかがでしょうか? そうですね。まずサーブレットに起因するかどうかを 確認してみたほうが良いみたいです。 >(もうアドバイスにすらなってなくて申し訳あ >りません…。) 私には思いつかないことばかり助言していただいているので助かっています。本当に有難うございます。
- pcbeginner
- ベストアンサー率46% (261/560)
見逃してましたが… >「echoはONです」 ↑が出力されるのって、 引数を渡してないとき じゃないですかね??? 設定されていない環境変数を出力しようとして echo %hoge% と入力すると %hoge% とechoへのパラメータがそのまま出力されますし。 Windowsによってちがうのかな…
お礼
>見逃してましたが… >>「echoはONです」 >↑が出力されるのって、 >引数を渡してないとき >じゃないですかね??? そうなんですよ。%path%で環境変数を表示させようとしているのですが、Pathの中身が空なので引数無しとして 「echoはONです」と出力されているのではないかと思っています。 因みに、aaa.exeをフルパスで指定すると別のエラー(~.dllが見つかりません)となるのでやはりPathが 読めてないと思われます。
お礼
有難うございます。 早速確認してみました。 しかし、環境変数Pathはシステムの環境変数として 登録されていました。 System.getProperty("user.name")で取得したユーザー名は[SYSTEM]と出力されました。サーブレットの起動コマンドを実行したのはAdministratorです。 サーブレットの部分についてはほとんど知識がありませんので的外れな回答になってるかもしれません・・・。