1、问题概述?
在开发中,我们期望通过Java或Python关闭appium服务,但有时候在关闭的时候,由于权限等问题,无法关闭成功。这个时候需要以管理员的身份运行,并关闭服务。
案例中通过Java远程,关闭服务器端的appium服务,如果不需要远程操作,直接调用关闭appium服务的脚本即可。
如果是远程操作需要安装openSSH服务,安装地址如下:
Windows离线安装openSSH服务实现远程访问_windows openssh离线安装-CSDN博客
2、Java远程调用bat文件
bat文件执行与py文件不同在于((ChannelExec) channel).setCommand(”cmd /c ”+command);
中需要加入cmd /c开头的命令
public class TestRemote {public static void main(String[] args) {String user ="Administrator"; // 远程电脑的用户名AdministratorString password = "0506"; // 远程电脑的密码123456String host = "192.168.133.1"; // 远程电脑的IP地址int port = 22; // SSH端口,默认是22Stringcommand="E:\\stopAppiumServer.bat";try {JSch jsch = new JSch();Session session = jsch.getSession(user, host, port);session.setPassword(password);session.setConfig("StrictHostKeyChecking", "no");//session设置utf-8编码集session.connect();System.out.println("===========session连接建立成功===============");// 执行命令Channel channel = session.openChannel("exec");System.out.println("==============远程命令执行1==============="+command);((ChannelExec) channel).setCommand(”cmd /c ”+command);channel.setInputStream(null);((ChannelExec) channel).setErrStream(System.err);//java.io.InputStream in = channel.getInputStream();long startTime=System.currentTimeMillis();// 读取Python测试的输出BufferedReader reader = new BufferedReader(new InputStreamReader(channel.getInputStream(),"GBK"));System.out.println("==============远程命令执行4===============");channel.connect();String line;int k=0;while ((line = reader.readLine()) != null) {System.out.println(line);k++;}
// Thread.sleep(100000000);channel.disconnect();System.out.println("==============程序结束,关闭通道===============");session.disconnect();reader.close();} catch (Exception e) {e.printStackTrace();}}
}
3、停止appium服务bat文件
蓝色部分为,调用管理员权限
红色部分为关闭appium服务命令
创建stopAppiumServer.bat文件
@echo off
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if '%errorlevel%' NEQ '0' (
goto UACPrompt
) else ( goto gotAdmin )
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
exit /B
:gotAdmin
if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
taskkill /F /IM node.exe
timeout /t 2
taskkill /F /IM Appium.exe
这种关闭appium服务的缺点:
由于这种方式同时关闭了node.exe,如果你有vue工程,也会被同时关闭。
但是这种关闭方式简单,一步到位。