借助Java中的批处理脚本启动tomcat服务

时间:2018-12-12 14:47:29

标签: java batch-file tomcat cmd

我已经创建了一个批处理文件,用于以管理员权限启动命令提示符。我要在此处实现的目标是,使用我创建的批处理文件在admin模式下运行cmd,然后使用Java代码在该提升的命令提示符下启动tomcat服务。

我的bat文件的内容如下:

@echo off

:: BatchGotAdmin
:-------------------------------------
REM  --> Check for permissions
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"

REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
   echo Requesting administrative privileges...     Click yes.
   goto UACPrompt
) else ( goto gotAdmin )

:UACPrompt
   echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
   set params = %*:"=""
   echo UAC.ShellExecute "%~s0", "%params%", "", "runas", 1 >> "%temp%\getadmin.vbs"

   "%temp%\getadmin.vbs"
   exit /B

:gotAdmin
   if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
   pushd "%CD%"
   CD /D "%~dp0"
:--------------------------------------

我的Java代码:

Process p =  Runtime.getRuntime().exec("cmd /c adminrights.bat  net start Tomcat7 ", null, new File("C:\\apache-tomcat-7.0.92\\bin"));
BufferedReader BR=new BufferedReader(new InputStreamReader(p.getInputStream()));
             String l;
             while((l=BR.readLine()) != null){
                 System.out.print(l);
         }

我不太确定在哪里放置net start Tomcat7命令。

1 个答案:

答案 0 :(得分:0)

所以您不确定将“net start tomcat7”放在哪里? 我希望根据您的描述,批处理文件会请求管理员权限,然后启动服务。因此命令会在

之后去某个地方
:gotAdmin

java 代码可能无法正确清空子进程的缓冲区(Windows 平台上的一项要求,以防止进程卡住)。因此,请确保不仅要从 stdout 读取,还要从 stderr 读取。

另见https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Process.html