我已经创建了一个批处理文件,用于以管理员权限启动命令提示符。我要在此处实现的目标是,使用我创建的批处理文件在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
命令。
答案 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