如何使用 java 远程关闭另一台计算机
How do I Remotely shutdown another computer using java
我在虚拟盒子里连接了两台机器。我知道机器已连接,因为我能够检测到目标 windows 机器
的 os
目标:使用一台机器关闭目标windows机器,使用接受用户输入的java程序:ip
问题:程序执行时跳转
runtime.exec("shutdown /m /t0 \" +ip);
因此它不会关闭目标计算机。
问题:为什么会这样,我该如何解决这个问题?
import java.io.IOException;
import java.util.Scanner;
public class RemoteShutdown
{
/*Shutdown user's computer*/
public void shutdown(String ip )
{
Runtime runtime = Runtime.getRuntime();
try
{
runtime.exec("shutdown /s /m \" +ip);
}
catch (IOException e)
{
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception
{
Scanner scanner = new Scanner(System.in);
RemoteShutdown shutDown = new RemoteShutdown();
System.out.print("Enter computer IP: ");
String IP = scanner.next().trim();
shutDown.shutdown(IP);
}
}
相对路径在 runtime.exec
中通常不是一个好主意。您几乎无法控制路径;一个更好的选择是通过 System.getenv
获取 windows 主目录并创建你自己的到 C:\Windows\System32 或任何 'shutdown.exe' 所在的路径。
通常这需要管理员访问权限,因此您想要的可能无法实现,或者可能需要以管理员权限启动 java。
一般不用exec,用ProcessBuilder
。试图了解 args 的拆分方式与基本的 exec
.
相当混乱
中的java,字符串中的\
为转义单。 "\"
是一个包含 只有一个反斜杠的字符串 ,但是你想在这里向 windows 发送 2 个反斜杠,所以,在 java 中,你会写 "\\" + ip
.
exec returns 一个 Process 对象,你告诉它合并输出和错误,然后你可以获取输出和错误流。这有很大帮助:在这种情况下,毫无疑问 shutdown.exe
告诉您另一台计算机的规格是错误的(实际上是由于缺少反斜杠),但您从未阅读过此数据。网络搜索 'ProcessBuilder java example read output' 可能会为您提供多个深入的帖子。
我在虚拟盒子里连接了两台机器。我知道机器已连接,因为我能够检测到目标 windows 机器
的 os目标:使用一台机器关闭目标windows机器,使用接受用户输入的java程序:ip
问题:程序执行时跳转
runtime.exec("shutdown /m /t0 \" +ip);
因此它不会关闭目标计算机。
问题:为什么会这样,我该如何解决这个问题?
import java.io.IOException;
import java.util.Scanner;
public class RemoteShutdown
{
/*Shutdown user's computer*/
public void shutdown(String ip )
{
Runtime runtime = Runtime.getRuntime();
try
{
runtime.exec("shutdown /s /m \" +ip);
}
catch (IOException e)
{
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception
{
Scanner scanner = new Scanner(System.in);
RemoteShutdown shutDown = new RemoteShutdown();
System.out.print("Enter computer IP: ");
String IP = scanner.next().trim();
shutDown.shutdown(IP);
}
}
相对路径在
runtime.exec
中通常不是一个好主意。您几乎无法控制路径;一个更好的选择是通过System.getenv
获取 windows 主目录并创建你自己的到 C:\Windows\System32 或任何 'shutdown.exe' 所在的路径。通常这需要管理员访问权限,因此您想要的可能无法实现,或者可能需要以管理员权限启动 java。
一般不用exec,用
相当混乱ProcessBuilder
。试图了解 args 的拆分方式与基本的exec
.中的java,字符串中的
\
为转义单。"\"
是一个包含 只有一个反斜杠的字符串 ,但是你想在这里向 windows 发送 2 个反斜杠,所以,在 java 中,你会写"\\" + ip
.exec returns 一个 Process 对象,你告诉它合并输出和错误,然后你可以获取输出和错误流。这有很大帮助:在这种情况下,毫无疑问
shutdown.exe
告诉您另一台计算机的规格是错误的(实际上是由于缺少反斜杠),但您从未阅读过此数据。网络搜索 'ProcessBuilder java example read output' 可能会为您提供多个深入的帖子。