ファイルシステム内のリソースを処理し、特定のユーザーの権限でアプリケーションを実行する 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 を使用します。
ありがとうミリオン。
フラビオ