1

ファイルシステム内のリソースを処理し、特定のユーザーの権限でアプリケーションを実行する webapp を開発しています。これまで、Windows 7 およびその他のバージョンで利用可能な ProcessBuilder と psexec サービスを呼び出しました。

def get() = {
  var currentOutputLine = ""
  val pb = new ProcessBuilder("psexec.exe", "/ACCEPTEULA", 
  "-u", "user1", "-p", "password", "-w", batchpath,  batchfile)
  pb.directory(new File(batchpath))
  pb.redirectErrorStream(true)
  val proc = pb.start
  val input = new BufferedReader(new InputStreamReader(proc.getInputStream))
while ({
    currentOutputLine = input.readLine();
    currentOutputLine != null
  }) {

}

アプリケーション サーバーは TOMCATUSER などの特別なユーザーとして実行されており、バッチファイルを "user1" として呼び出そうとしています。このコードは Windows 7 x64 では問題なく動作しますが、Windows 2008 sp2 では問題があります。

Windows 2008 サーバー SP2 を使用して、Java アプリケーションから psexec を実行すると 1073741502 エラーが返され、eventviewr を監視すると、ポップアップ ウィンドウを開くことができないため、OS が cmd.exe でエラーを報告したことがわかります。

多くのテストの後、psexec が呼び出されるシステムの管理者グループに「user1」と「tomcatuser」を割り当て、次のようにホスト名パラメーターを指定して psexec を呼び出す必要があることがわかりました。

def get() = {
  var currentOutputLine = ""
  val pb = new ProcessBuilder("psexec.exe","\\\\localhost", "/ACCEPTEULA", 
  "-u", "user1", "-p", "password", "-w", batchpath,  batchfile)
  pb.directory(new File(batchpath))
  pb.redirectErrorStream(true)
  val proc = pb.start
  val input = new BufferedReader(new InputStreamReader(proc.getInputStream))
while ({
    currentOutputLine = input.readLine();
    currentOutputLine != null
  }) {

}

この問題を回避する方法はありますか? user1 としてスクリプトを実行する必要があるだけなので、user1 アカウントに管理者権限を割り当てたくありません。私は主にファイルシステムで tomcatuser (ファイルの作成、コピー、移動) ではなく「user1」として作業する必要があるため、psexec を使用します。

ありがとうミリオン。

フラビオ

4

1 に答える 1