クライアントの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 引数 ←ここが正常に動作しない
No.6
- 回答日時:
前に見たことがあるコードは
(AIXでシェルの終了を待ってるんですけど。)
int i;
while(true){
try{
//終了コード取得
i = p.exitValue();
break;
}catch(IllegalThreadStateException e){
//実行中→何もしない
}
}
って感じで終了するのを待ってましたね。
これでどうでしょうか?
(ってあまり行儀のいいコードじゃぁないと思いますが。)
すみません。
返事が遅くなりました。
これは、いけそうですね。
終了後にiの値をチェックすれば
問題ないと思われます。
とりあえず、移行時のPGですので
サーブレットコンテナのサービスを
Administratorで起動する方向で決まりそうです。
移行が完了したらSYSTEMで起動に変更します。
長々とお付き合いいただき有難うございました。
助かりました。
No.5
- 回答日時:
自分の環境は
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はタスクに
残ってしまいました。
やはり、サービスの起動ユーザーを変更しないと
いけないのでしょうか?
長々とお付き合いいただいて恐縮です。
サーブレットはサービスで自動起動していました。
ログインはLocalSystemとなっていましたので、
デフォルトで存在する「SYSTEM」なるユーザーが起動を
かけているようです。
バッチ内でPath=・・・としてAdministratorで切ってあるPathをそっくり設定して動作確認したところエラーは出なくなりましたが、バッチが固まるようになりました。
やはり、Pathが空だったようです。
固まる原因は不明ですが・・・。
有難うございます。m(_ _)m
No.4
- 回答日時:
#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は空かもしれません。
No.3
- 回答日時:
>aaa.exeをフルパスで指定すると別のエラー
>(~.dllが見つかりません)
>となるのでやはりPathが読めてないと思われます。
絶対パスで指定しているのだから、pathは関係ないのでは?
バッチファイルがあるディレクトリからの相対パスで実行しても同じでしょうか?
あとは…
サーブレットじゃなくて、mainメソッドのみで、バッチを実行するだけのjavaクラスから、簡単なバッチを実行してみてはいかがでしょうか?
(もうアドバイスにすらなってなくて申し訳ありません…。)
有難うございます。
言葉足らずですみません。
別のエラー(~.dllがみつかりません)というのはaaa.exeがdllを呼び出そうとして出ているエラーと
思われます。フルパスを指定していないときはaaa.exeがみつかりません。というエラーでした。c:\Windows等がPathできられていないからだと思います。
>サーブレットじゃなくて、mainメソッドのみで、
>バッチを実行するだけのjavaクラスから、簡単
>なバッチを実行してみてはいかがでしょうか?
そうですね。まずサーブレットに起因するかどうかを
確認してみたほうが良いみたいです。
>(もうアドバイスにすらなってなくて申し訳あ
>りません…。)
私には思いつかないことばかり助言していただいているので助かっています。本当に有難うございます。
No.2
- 回答日時:
見逃してましたが…
>「echoはONです」
↑が出力されるのって、
引数を渡してないとき
じゃないですかね???
設定されていない環境変数を出力しようとして
echo %hoge%
と入力すると
%hoge%
とechoへのパラメータがそのまま出力されますし。
Windowsによってちがうのかな…
>見逃してましたが…
>>「echoはONです」
>↑が出力されるのって、
>引数を渡してないとき
>じゃないですかね???
そうなんですよ。%path%で環境変数を表示させようとしているのですが、Pathの中身が空なので引数無しとして
「echoはONです」と出力されているのではないかと思っています。
因みに、aaa.exeをフルパスで指定すると別のエラー(~.dllが見つかりません)となるのでやはりPathが
読めてないと思われます。
No.1ベストアンサー
- 回答日時:
システムの環境変数
じゃなくて
ユーザーの環境変数
に設定していませんか?
サーブレットコンテナ?を起動しているユーザーで実行されると思いますので、そこら辺を確認なさってはいかがでしょうか?
javaでSystem.getProperty("user.name")とやってjavaを起動しているユーザー名を取得してみるのもいいかもしれません。
有難うございます。
早速確認してみました。
しかし、環境変数Pathはシステムの環境変数として
登録されていました。
System.getProperty("user.name")で取得したユーザー名は[SYSTEM]と出力されました。サーブレットの起動コマンドを実行したのはAdministratorです。
サーブレットの部分についてはほとんど知識がありませんので的外れな回答になってるかもしれません・・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP 共通の処理をまとめる方法がわからないのでアドバイスお願いします。 1 2022/12/19 20:20
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- オープンソース Pythonのコードをexe化 1 2023/07/03 08:01
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- 英語 be sorry for doingとbe sorry to have doneの意味の違いについて 2 2023/06/09 13:57
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
javaが起動しない
-
GCログに日付時刻を表示したい
-
Eclipse + JBOSS でのデバッグ
-
リモートからTomcatにアクセス...
-
Tomcatのシャットダウンについて
-
eclipse + Tomcat v5.5 で 動的...
-
Tomcatは起動しますが初期index...
-
Eclipse・プロジェクトで、フォ...
-
Eclipseで、プロジェクト名のと...
-
html上で、バッチやexeファイル...
-
マイクラjavaでForgeを入れたい...
-
シンボルが見つかりませんとい...
-
Eclipse(JAVA)のデバッグで他...
-
Javaをインストールしたんです...
-
split関数で区切り文字がない場合
-
JAVAにのeclipseに関する質問で...
-
Eclipseのアンインストールの仕方
-
正しいURL指定しているにもかか...
-
CloudSticky.jarが起動しない。
-
javaが文字コードの影響でコン...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Tomcatは起動しますが初期index...
-
Tomcatプロジェクトの.properti...
-
apache+tomcatの起動手順
-
「ファイルが見つかりません D...
-
javaが起動しない
-
The requested resource is no...
-
リモートからTomcatにアクセス...
-
EclipseからTomcatを起動できない
-
Tomcatに-Dオプションを読込ま...
-
javaサーブレットから別サーバ...
-
スタンドアロンJavaプログラム(...
-
apache + tomcat でtomcatが起...
-
Eclipse + JBOSS でのデバッグ
-
Tomcatでwarファイルの展開に失...
-
EclipseからTomcatを起動した際...
-
Tomcatは2、3日に1回再起動...
-
tomcatをサービスで登録すると...
-
jspで無限ループ
-
JavaServletデバッグってどうや...
-
tomcatをプロジェクト毎に起動...
おすすめ情報