プロが教えるわが家の防犯対策術!

クライアントのPCからブラウザ上でボタンをクリック
するとサーバー上のバッチを起動するようにしていますが、サーバー上で直接バッチを起動した場合は正常に動作しています。しかし、ブラウザから起動した場合には一部が正常に動作してくれません。
ブラウザから起動したバッチ上で
echo %path% > c:\aaa.txt
としてPathを確認しようとしたら「echoはONです」と
出力されていました。
直接起動した場合は環境変数のPathが出力されます。
環境変数で指定しているPathは使えないのでしょうか?

ご存知のかたがいらっしゃいましたらご教授お願い致します。

【バッチの内容】
set DT=%date:~2,4%%date:~7,2%%date:~10,2%

if "%time:~0,1%"==" " set TM=0%time:~1,1%%time:~3,2%%time:~6,2%
if "%time:~0,1%"==" " GOTO :P1
set TM=%time:~0,2%%time:~3,2%%time:~6,2%

:P1

set DirName=C:\backup\%DT%_%TM%

mkdir %DirName%

echo %path% >C:\hammy\hammy.txt

aaa.exe 引数 ←ここが正常に動作しない

A 回答 (6件)

前に見たことがあるコードは


(AIXでシェルの終了を待ってるんですけど。)
int i;
while(true){
  try{
    //終了コード取得
    i = p.exitValue();

    break;
  }catch(IllegalThreadStateException e){
    //実行中→何もしない
  }
}
って感じで終了するのを待ってましたね。
これでどうでしょうか?
(ってあまり行儀のいいコードじゃぁないと思いますが。)
    • good
    • 0
この回答へのお礼

すみません。
返事が遅くなりました。

これは、いけそうですね。
終了後にiの値をチェックすれば
問題ないと思われます。

とりあえず、移行時のPGですので
サーブレットコンテナのサービスを
Administratorで起動する方向で決まりそうです。
移行が完了したらSYSTEMで起動に変更します。

長々とお付き合いいただき有難うございました。
助かりました。

お礼日時:2005/06/23 09:19

自分の環境は


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は空かもしれません。
現時点では↑の可能性が高いとしか言えないですね…。

この回答への補足

サーブレットのサービスを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はタスクに
残ってしまいました。

やはり、サービスの起動ユーザーを変更しないと
いけないのでしょうか?

補足日時:2005/06/21 16:02
    • good
    • 0
この回答へのお礼

長々とお付き合いいただいて恐縮です。
サーブレットはサービスで自動起動していました。
ログインはLocalSystemとなっていましたので、
デフォルトで存在する「SYSTEM」なるユーザーが起動を
かけているようです。

バッチ内でPath=・・・としてAdministratorで切ってあるPathをそっくり設定して動作確認したところエラーは出なくなりましたが、バッチが固まるようになりました。
やはり、Pathが空だったようです。
固まる原因は不明ですが・・・。
有難うございます。m(_ _)m

お礼日時:2005/06/21 13:33

#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は空かもしれません。

補足日時:2005/06/21 09:44
    • good
    • 0
この回答へのお礼

あるかもしれません。
早速、確認してみます。

お礼日時:2005/06/20 17:01

>aaa.exeをフルパスで指定すると別のエラー


>(~.dllが見つかりません)
>となるのでやはりPathが読めてないと思われます。
絶対パスで指定しているのだから、pathは関係ないのでは?
バッチファイルがあるディレクトリからの相対パスで実行しても同じでしょうか?

あとは…
サーブレットじゃなくて、mainメソッドのみで、バッチを実行するだけのjavaクラスから、簡単なバッチを実行してみてはいかがでしょうか?
(もうアドバイスにすらなってなくて申し訳ありません…。)
    • good
    • 0
この回答へのお礼

有難うございます。
言葉足らずですみません。
別のエラー(~.dllがみつかりません)というのはaaa.exeがdllを呼び出そうとして出ているエラーと
思われます。フルパスを指定していないときはaaa.exeがみつかりません。というエラーでした。c:\Windows等がPathできられていないからだと思います。

>サーブレットじゃなくて、mainメソッドのみで、
>バッチを実行するだけのjavaクラスから、簡単
>なバッチを実行してみてはいかがでしょうか?

そうですね。まずサーブレットに起因するかどうかを
確認してみたほうが良いみたいです。

>(もうアドバイスにすらなってなくて申し訳あ
>りません…。)
私には思いつかないことばかり助言していただいているので助かっています。本当に有難うございます。

お礼日時:2005/06/20 13:35

見逃してましたが…


>「echoはONです」
↑が出力されるのって、
引数を渡してないとき
じゃないですかね???

設定されていない環境変数を出力しようとして
echo %hoge%
と入力すると
%hoge%
とechoへのパラメータがそのまま出力されますし。
Windowsによってちがうのかな…
    • good
    • 0
この回答へのお礼

>見逃してましたが…
>>「echoはONです」
>↑が出力されるのって、
>引数を渡してないとき
>じゃないですかね???

そうなんですよ。%path%で環境変数を表示させようとしているのですが、Pathの中身が空なので引数無しとして
「echoはONです」と出力されているのではないかと思っています。
因みに、aaa.exeをフルパスで指定すると別のエラー(~.dllが見つかりません)となるのでやはりPathが
読めてないと思われます。

お礼日時:2005/06/20 13:04

システムの環境変数


じゃなくて
ユーザーの環境変数
に設定していませんか?

サーブレットコンテナ?を起動しているユーザーで実行されると思いますので、そこら辺を確認なさってはいかがでしょうか?

javaでSystem.getProperty("user.name")とやってjavaを起動しているユーザー名を取得してみるのもいいかもしれません。
    • good
    • 0
この回答へのお礼

有難うございます。
早速確認してみました。
しかし、環境変数Pathはシステムの環境変数として
登録されていました。

System.getProperty("user.name")で取得したユーザー名は[SYSTEM]と出力されました。サーブレットの起動コマンドを実行したのはAdministratorです。
サーブレットの部分についてはほとんど知識がありませんので的外れな回答になってるかもしれません・・・。

お礼日時:2005/06/20 11:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!