`

Java 获取系统软件安装列表

    博客分类:
  • Java
阅读更多
Java获取系统软件安装列表
package com.kevin.demo;
/**
 * @author  <a href="mailto:foohsinglong@gmail.com">kevin.long</a>
 * @description Java获取系统软件安装列表,代码核心来自网上,主要通过Runtime实现,
 *  用JNI也行,解决乱码问题
 */
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextPane;
 
public class SystemSoftware {  
	private JFrame f = new JFrame("本系统已经安装的软件列表");
	private JTextPane textPane = new JTextPane();
	private MyTable myTable=new MyTable();
	public static Charset charset = Charset.forName("GBK");
	public SystemSoftware() {
		f.setLocation(300, 200);
		f.setSize(800,500);
		JScrollPane jScrollPane = new JScrollPane(myTable.getTable());
		f.add(jScrollPane);
		f.setVisible(true);
		f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);

		try {
			check();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	private void check() throws Exception {
		textPane.setText("您已经安装的软件:");
		Runtime runtime = Runtime.getRuntime();
		Process process = null;
		process = runtime
				.exec("cmd /c reg query HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\");
		BufferedReader in = new BufferedReader(new InputStreamReader(process
				.getInputStream(),"GBK"));
		String string = null;
		while ((string = in.readLine()) != null) {
			process = runtime.exec("cmd /c reg query " + string
					+ " /v DisplayName");
			BufferedReader name = new BufferedReader(new InputStreamReader(
					process.getInputStream(),"GBK"));
			String[] message = queryValue(string);
			if(message!=null) myTable.addRow(message);
			f.repaint();
		}
		in.close();
		process.destroy();

	}

	//具体查询每一个软件的详细信息
	private String[] queryValue(String string) throws IOException {
		String nameString = "";
		String versionString = "";
		
		String publisherString="";
		String uninstallPathString = "";
		
		Runtime runtime = Runtime.getRuntime();
		Process process = null;
		BufferedReader br = null;
		
		process = runtime.exec("cmd /c reg query " + string + " /v DisplayName");
		br = new BufferedReader(new InputStreamReader(process
				.getInputStream(),"GBK"));
		br.readLine();br.readLine();//去掉前两行无用信息
		if((nameString=br.readLine())!=null){
			nameString=nameString.replaceAll("DisplayName    REG_SZ    ", "");	//去掉无用信息
		}
		

		process = runtime.exec("cmd /c reg query " + string + " /v DisplayVersion");
		br = new BufferedReader(new InputStreamReader(process
				.getInputStream(),"GBK"));
		br.readLine();br.readLine();//去掉前两行无用信息
		if((versionString=br.readLine())!=null){
			versionString=versionString.replaceAll("DisplayVersion    REG_SZ    ", "");	//去掉无用信息
		}
		
		process = runtime.exec("cmd /c reg query " + string + " /v Publisher");
		br = new BufferedReader(new InputStreamReader(process
				.getInputStream(),"GBK"));
		br.readLine();br.readLine();//去掉前两行无用信息
		if((publisherString=br.readLine())!=null){
			publisherString =publisherString.replaceAll("Publisher    REG_SZ    ", "");	//去掉无用信息
		}
		
		process = runtime.exec("cmd /c reg query " + string + " /v UninstallString");
		br = new BufferedReader(new InputStreamReader(process
				.getInputStream(),"GBK"));
		br.readLine();br.readLine();//去掉前两行无用信息
		if((uninstallPathString=br.readLine())!=null){
			uninstallPathString=uninstallPathString.replaceAll("UninstallString    REG_SZ    ", "");	//去掉无用信息
		}
		
		String[] resultString=new String[4];
		resultString[0]= nameString ;//== null ? null : new String(nameString.getBytes(),"GB-2312");
		resultString[1]= versionString ;//== null ? null : new String(versionString.getBytes(),"GB-2312");
		resultString[2]= publisherString ;//== null ? null : new String(publisherString.getBytes(),"GB-2312");
		resultString[3]= uninstallPathString ;//== null ? null : new String(uninstallPathString.getBytes(),"GB-2312");
		if(resultString[0]==null) resultString=null;	//没有名字的不显示
		return resultString;
	}
	
	//列表
	private class MyTable{
		private JTable jTable;
		private Object[][] data=new Object[100][4];
		private Object[] colNames= { "软件名称","版本号","出版商","卸载路径"};
		private int p=-1;
		
		public MyTable(){
			
		}
		
		public void addRow(Object[] data){
			p++;
			if(p>=100) return ;
			this.data[p]=data;
		}
		
		
		public JTable getTable(){
			jTable=new JTable(data,colNames);
			return jTable;
		}
		
	}
	
	public static void main(String[] args) {
		new SystemSoftware();
	}
}  
分享到:
评论

相关推荐

    JAVA查看安装软件列表(axun)

    在Java编程环境中,有时我们需要获取用户的系统信息,例如已安装软件列表,以便进行特定的管理和操作。"JAVA查看安装软件列表(axun)"项目提供了一个实用的解决方案,它是一个小型的Java应用程序,允许开发者或者用户...

    Java 访问注册列表 读软件安装路径

    Java 访问注册列表需要使用 JNI(Java Native Interface)技术,通过 JNI 可以调用 Windows 操作系统的 API 函数。为了访问注册列表,需要下载两个文件:ICE_JNIRegistry.dll 和 registry.jar。其中,ICE_...

    java调用DOS获得系统进程列表

    ### 使用Java调用DOS命令获取系统进程列表 在日常的软件开发与系统管理工作中,经常需要通过编程的方式来获取或操作系统的相关信息。本篇文章将详细解释如何利用Java语言调用DOS命令来获取Windows系统的进程列表。...

    获取本机所有已安装的软件

    标题“获取本机所有已安装的软件”涉及的是在计算机系统中检索已安装应用程序的过程,这对于系统维护、软件管理或程序开发来说都是重要的任务。在Windows操作系统中,这个过程可以通过不同的方式来实现。 首先,...

    java-getDisk.rar_Java 获取主板ID_java获取电脑ID

    在Java编程语言中,获取计算机硬件信息,如主板ID(也称为系统UUID)和硬盘分区编号,是一项常见的任务,尤其在系统管理和软件授权等领域。以下将详细解释如何使用Java实现这些功能。 首先,主板ID是计算机主板上的...

    java3D安装文件和安装方法

    安装完成后,需要更新系统的环境变量以确保Java3D能被Java虚拟机(JVM)识别。这通常涉及添加Java3D的库目录到`JAVA_HOME/jre/lib/ext`或者`JRE_HOME/lib/ext`路径下,然后将`java.class.path`环境变量更新,包含...

    一键获取电脑中软件列表并导出.7z

    在Windows操作系统中,管理和了解已安装软件列表是系统维护的重要环节。这个名为"SoftInfo获取电脑中软件列表并导出.7z"的压缩包文件提供了一种便捷的方法,能够帮助用户快速收集并导出电脑上所有软件的相关信息。...

    JAVA安装软件

    在Windows 7这样的操作系统上安装Java软件是开发和运行Java应用程序的基础步骤。本文将详细讲解如何在Win7系统下安装Java,并重点介绍JCreator中文版这款集成开发环境(IDE)。 首先,我们需要下载Java Development...

    java运行环境的安装

    4. 配置环境变量:安装完成后,需要配置系统环境变量,让系统知道Java的安装位置。打开系统环境变量设置,添加以下两个变量: - `JAVA_HOME`:值设置为JDK的安装目录。 - `Path`:在系统变量的Path中添加 `%JAVA_...

    IBM AIX6.1环境下安装、卸载Java JRE、SDK

    本文旨在详细介绍如何在 IBM AIX 6.1 操作系统环境中进行 Java JRE 和 SDK 的安装及卸载,并对相关的环境变量配置方法进行了详尽的说明,帮助用户在该平台上顺利搭建起 Java 开发与运行环境。 #### 二、准备工作 ...

    JAVA运行环境一键安装

    4. 自动配置:一键安装程序会自动检测并配置系统路径,确保Java可以在任何位置被调用。例如,设置`JAVA_HOME`环境变量,以及更新`PATH`变量,将Java可执行文件的路径添加进去。 5. 安装过程:点击“下一步”或...

    java实现自动阅卷系统

    Java 实现的自动阅卷系统是一种高效、便捷的教育辅助工具,它利用计算机技术自动评估学生的答案,大大减轻了教师的工作负担。在这个项目中,我们可以深入理解Java编程语言在处理大量数据、IO操作以及实现自动化流程...

    可以自动获取Java的安装环境

    本工具名为"java环境变量配置工具",它提供了一种便捷的方式,帮助用户自动获取Java的安装环境,从而省去了手动配置的麻烦。 首先,我们要理解Java环境变量的重要性。`JAVA_HOME`变量是指向Java安装目录的路径,...

    java安装说明原文

    - **兼容性问题**:确保 Java 版本与系统版本及其他已安装软件的兼容性。 #### 四、总结 本文档提供了关于在 UNIX 系统上安装 Sun Java Enterprise System 的重要信息。虽然文档本身未给出具体的安装步骤,但通过...

    java系统软件技术架构设计方案.docx

    【Java系统软件技术架构设计方案】 本方案主要探讨的是基于Java技术的系统软件设计,旨在创建一个既能创造客户价值又能提供良好用户体验的软件产品。设计理念上,公司着重于用户友好性和功能实用性,兼顾成本控制、...

    java图片浏览管理系统

    10. **错误处理与日志记录**:为了确保软件稳定性,系统需要处理可能出现的错误,并通过日志记录错误信息,例如使用Log4j或Java内置的日志框架。 综上所述,"java图片浏览管理系统"是一个集成了多种Java技术的项目...

    java SQL 超市管理系统 软件工程

    【Java SQL超市管理系统软件工程】是一个综合性的项目,它涵盖了软件开发的多个重要方面,包括需求分析、系统设计、编程实现、数据库管理以及测试。在这个项目中,Java语言被用来编写应用程序,而SQL则用于管理和...

    Java Service Wrapper 将你的java应用程序安装成windows系统服务

    Java Service Wrapper是一个强大的工具,它允许开发者将Java应用程序轻松地包装为Windows系统服务,以便在操作系统启动时自动启动Java程序,并能实现与系统服务相同的管理功能,如自动重启、日志记录等。这个工具...

    Android开发之系统信息【4】——获取Android已安装程序列表

    ### Android开发之系统信息【4】——获取Android已安装程序列表 #### 一、概述 在Android开发过程中,有时我们需要获取设备上的一些硬件信息或软件信息。例如,开发者可能会关心设备上的内存状况或是已安装的应用...

Global site tag (gtag.js) - Google Analytics