如何在远程计算机上停止和启动java中的windows服务
我有一个停止和启动windows服务的java应用程序。我有一个要求,它应该能够在远程机器上执行此操作。我当前用于远程启动Windows服务的代码如下所示:如何在远程计算机上停止和启动java中的windows服务,java,windows-services,Java,Windows Services,我有一个停止和启动windows服务的java应用程序。我有一个要求,它应该能够在远程机器上执行此操作。我当前用于远程启动Windows服务的代码如下所示: public void executeCommand() { String[] command = {"cmd.exe", "/c", "sc", "\\\\192.168.1.27", "start", "btwdins"}; try { Process process = new ProcessBuil
public void executeCommand() {
String[] command = {"cmd.exe", "/c", "sc", "\\\\192.168.1.27", "start", "btwdins"};
try {
Process process = new ProcessBuilder(command).start();
InputStream inputStream = process.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String line;
while ((line = bufferedReader.readLine()) != null) {
System.out.println(line);
}
} catch (Exception ex) {
System.out.println("Exception : " + ex);
}
}
但是,运行此命令时,我会出现以下错误:
[SC] OpenSCManager FAILED 5:
Access is denied.
请注意以下事项:
- 本地和远程计算机都在Windows 10上运行
- 远程计算机已禁用其防火墙
- RPC(远程过程调用)正在远程计算机上运行
- 在远程计算机上打开文件和打印机共享
我错过了什么?任何帮助都将不胜感激 您可以尝试从internet下载PsExec.exe并编写以下代码 公共类远程连接 {
}您可以尝试将执行
sc.exe
的计算机添加到远程计算机上的本地Administrators
组中(如何操作在很大程度上取决于您使用的Windows版本,因此将其添加到问题中可能有助于弹出更多答案)。
static String psCommandStart = null;
static String psCommandStop = null;
public static void main(String[] args) {
String currentServerHostname="192.168.0.1";
String currentServerUser="Administrator";
String currentServerPass="admin";
String commandToStart="net start ServiceName";
String commandToStop="net stop ServiceName";
String psCommand = "D://Workspace //PsExec.exe \\\\"+ currentServerHostname + " -u " + currentServerUser + " -p " + currentServerPass;
psCommandStart = psCommand + " " + commandToStart;
psCommandStop = psCommand + " " + commandToStop;
ServiceStart();
ServiceStop();
}
private static void ServiceStop() {
String[] cmd = new String[5];
cmd[0]="cmd.exe";
cmd[1]="/C";
cmd[2]=psCommandStop;
cmd[3]="";
cmd[4]="";
// Run remote command
File f = new File(getCurrentWorkingDirectory() + "\\lib");
try
{
Process run = Runtime.getRuntime().exec(cmd,null,f);
}
catch (IOException e)
{
e.printStackTrace();
}
}
private static void ServiceStart() {
String[] cmd = new String[5];
cmd[0]="cmd.exe";
cmd[1]="/C";
cmd[2]=psCommandStart;
cmd[3]="";
cmd[4]="";
// Run remote command
File f = new File(getCurrentWorkingDirectory() + "\\lib");
try
{
Process run = Runtime.getRuntime().exec(cmd,null,f);
}
catch (IOException e)
{
e.printStackTrace();
}
}
private static String getCurrentWorkingDirectory() {
String currentDir = System.getProperty("user.dir");
return currentDir;
}