java控制Windows进程,服务管理器项目

简介: 本文介绍了如何使用Java的`Runtime`和`Process`类来控制Windows进程,包括执行命令、读取进程输出和错误流以及等待进程完成,并提供了一个简单的服务管理器项目示例。

概述:可以使用Runtime类和Process类。

使用Runtime.getRuntime().exec()方法执行Windows命令。这个方法接受一个字符串参数,表示要执行的命令。例如,要执行ipconfig命令,可以这样写:

String command = "ipconfig";
Process process = Runtime.getRuntime().exec(command);
  1. 获取进程的输入流和错误流。通过Process.getInputStream()Process.getErrorStream()方法可以分别获取进程的输入流和错误流。这两个流可以用来读取命令执行的结果和错误信息。

  2. 读取进程的输出。可以使用BufferedReader类来读取进程的输出。例如:

BufferedReader inputReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = inputReader.readLine()) != null) {
    System.out.println(line);
}
  1. 读取进程的错误输出。与读取进程的输出类似,可以使用BufferedReader类来读取进程的错误输出。例如:
BufferedReader errorReader = new BufferedReader(new InputStreamReader(process.getErrorStream()));
String line;
while ((line = errorReader.readLine()) != null) {
    System.err.println(line);
}
  1. 等待进程完成。使用Process.waitFor()方法等待进程完成。例如:
int exitCode = process.waitFor();
System.out.println("Exit code: " + exitCode);

这就是一个简单的Java控制Windows进程的概述。需要注意的是,这种方法只适用于Windows操作系统,因为执行的命令是Windows特有的。在其他操作系统上,需要使用相应的命令。

服务管理器项目地址:

nanshaws/processManager: 用javafx搞了一个简单的服务管理器,可用来开启和关闭mysql等类型的服务。当前只可运行在Windows上 (github.com)

package org.example.processmanager.utils;

import java.io.IOException;
/**
 * @author cyl
 */
public class ProcessManager {
    public static void start(String name) {
        // 命令行指令,启动 name 服务
        String startCommand = "sc start "+name;
        try {
            // 启动 name 服务
            Process startProcess = new ProcessBuilder("cmd", "/c", startCommand).start();
            startProcess.waitFor();
            System.out.println(name+"服务已启动");
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }
    }

    public static void stop(String name){
         // 命令行指令,关闭 name 服务
         String stopCommand = "sc stop "+name;
         // 关闭 name 服务
        Process stopProcess = null;
        try {
            stopProcess = new ProcessBuilder("cmd", "/c", stopCommand).start();
            stopProcess.waitFor();
            System.out.println(name+"服务已关闭");
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

}
目录
相关文章
|
1月前
|
关系型数据库 MySQL Java
【MySQL+java+jpa】MySQL数据返回项目的感悟
【MySQL+java+jpa】MySQL数据返回项目的感悟
43 1
|
1月前
|
编解码 Oracle Java
java9到java17的新特性学习--github新项目
本文宣布了一个名为"JavaLearnNote"的新GitHub项目,该项目旨在帮助Java开发者深入理解和掌握从Java 9到Java 17的每个版本的关键新特性,并通过实战演示、社区支持和持续更新来促进学习。
76 3
|
2天前
|
Java Android开发
Eclipse 创建 Java 项目
Eclipse 创建 Java 项目
14 4
|
8天前
|
SQL Java 数据库连接
从理论到实践:Hibernate与JPA在Java项目中的实际应用
本文介绍了Java持久层框架Hibernate和JPA的基本概念及其在具体项目中的应用。通过一个在线书店系统的实例,展示了如何使用@Entity注解定义实体类、通过Spring Data JPA定义仓库接口、在服务层调用方法进行数据库操作,以及使用JPQL编写自定义查询和管理事务。这些技术不仅简化了数据库操作,还显著提升了开发效率。
20 3
|
7天前
|
Java
java小知识—进程和线程
进程 进程是程序的一次执行过程,是系统运行的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。简单来说,一个进程就是一个执行中的程序,它在计算机中一个指令接着一个指令地执行着,同时,每个进程还占有某些系统资源如CPU时间,内存空间,文件,文件,输入输出设备的使用权等等。换句话说,当程序在执行时,将会被操作系统载入内存中。 线程 线程,与进程相似,但线程是一个比进程更小的执行单位。一个进程在其执行的过程中产生多个线程。与进程不同的是同类的多个线程共享同一块内存空间和一组系统资源,所以系统在产生一个线程,或是在各个线程之间做切换工作时,负担要比
17 1
|
10天前
|
前端开发 Java 数据库
如何实现一个项目,小白做项目-java
本教程涵盖了从数据库到AJAX的多个知识点,并详细介绍了项目实现过程,包括静态页面分析、数据库创建、项目结构搭建、JSP转换及各层代码编写。最后,通过通用分页和优化Servlet来提升代码质量。
28 1
|
1月前
|
JavaScript 前端开发 Java
解决跨域问题大集合:vue-cli项目 和 java/springboot(6种方式) 两端解决(完美解决)
这篇文章详细介绍了如何在前端Vue项目和后端Spring Boot项目中通过多种方式解决跨域问题。
334 1
解决跨域问题大集合:vue-cli项目 和 java/springboot(6种方式) 两端解决(完美解决)
|
1月前
|
边缘计算 安全 网络安全
|
17天前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
28天前
|
人工智能 JavaScript 网络安全
ToB项目身份认证AD集成(三完):利用ldap.js实现与windows AD对接实现用户搜索、认证、密码修改等功能 - 以及针对中文转义问题的补丁方法
本文详细介绍了如何使用 `ldapjs` 库在 Node.js 中实现与 Windows AD 的交互,包括用户搜索、身份验证、密码修改和重置等功能。通过创建 `LdapService` 类,提供了与 AD 服务器通信的完整解决方案,同时解决了中文字段在 LDAP 操作中被转义的问题。