Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从java启动windows服务_Java_Windows Services - Fatal编程技术网

从java启动windows服务

从java启动windows服务,java,windows-services,Java,Windows Services,如何从Java启动/停止Windows服务?例如,我想从Java启动和停止mysql Windows服务 如果可以启动/停止,那么是否可以知道服务是否成功启动?您可以通过Runtime#exec方法执行以下命令 净启动和净停止(有关完整信息,请访问:) 您可能必须使用cmd/c net start,因为它将在shell下执行命令。您可以使用exec()命令从java执行系统命令-此处可以找到关于此命令的简单教程- 现在,您可以使用系统命令来启动/停止windows服务-在这里可以找到相同的示例

如何从Java启动/停止Windows服务?例如,我想从Java启动和停止mysql Windows服务


如果可以启动/停止,那么是否可以知道服务是否成功启动?

您可以通过Runtime#exec方法执行以下命令

净启动和净停止(有关完整信息,请访问:)


您可能必须使用cmd/c net start,因为它将在shell下执行命令。

您可以使用exec()命令从java执行系统命令-此处可以找到关于此命令的简单教程-

现在,您可以使用系统命令来启动/停止windows服务-在这里可以找到相同的示例


我对监视状态不是很确定,因此在这方面没有太大帮助

您可以使用字符串数组制定命令提示脚本来启动、停止和检查服务的状态:

// start service
String[] script = {"cmd.exe", "/c", "sc", "start", SERVICE_NAME};

// stop service
String[] script = {"cmd.exe", "/c", "sc", "stop", SERVICE_NAME};

// check whether service is running or not
String[] script = {"cmd.exe", "/c", "sc", "query", APP_SERVICE_NAME, "|", "find", "/C", "\"RUNNING\""};
使用以下命令执行脚本:

Process process = Runtime.getRuntime().exec(script);
你试过了吗?它有一些很好的api来实现这一点

JNA在这方面非常活跃,所以你可以带着具体的问题回来

import java.io.*;
import java.util.*;

public class ServiceStartStop {
    public static void main(String args[]) {
        String[] command = {"cmd.exe", "/c", "net", "start", "Mobility Client"};
        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);
        }
    }
}

它工作得很好。。。。在Windows中,您可以使用DOS命令解释器中的sc.exe命令来启动/停止/查询服务名称,而不是使用“sc”或“net”命令。

;例如:
sc\\10.8.0.1 query spserv
查询IP地址为10.8.0.1的PC上名为“spserv”的服务的当前状态。您可以在本地或远程执行此操作。您也可以使用“net start/stop”启动服务。有关服务控制器(sc.exe)的详细信息,请检查。并检查下面的增强答案。
sc.exe
net.exe
更详细,可以帮助您获取有关Windows服务的更多详细信息。请参阅
sc/?
,了解它的功能。但是,这两个Windows的默认实用程序仍然需要管理员权限。如何处理提升需求?请注意,自java 1.7以来,您只需调用
inheritIO
即可重定向到stdout,以获取运行进程的输出。我尝试使用您的示例。它不起作用,也没有抛出任何异常。当我使用sc而不是net时,控制台上会显示此错误“[sc]StartService:OpenService失败5:访问被拒绝”。如果我尝试在没有管理员权限的情况下启动/停止服务,则会拒绝访问。你知道如何在JAVA中通过管理员访问来执行吗?我知道的一种方法是管理员将权限授予试图更改服务的用户。我不是Windows用户,因此无法详细解释。我遇到以下错误:
[SC]StartService:OpenService失败5:访问被拒绝。
可能有点晚,但是对于新用户,如果您被拒绝访问,您必须在命令提示符下以管理员权限执行jar,或者以管理员身份启动eclipse或任何其他IDE。您对服务名称和应用服务名称是什么意思?你能举个例子吗?