从Java获取MS Windows安装的应用程序
是否可以从使用java的windows vista计算机上获取已安装应用程序的列表(如un install programs中的列表)?如果您是指已安装的应用程序,我认为直接使用java SDK是不可能的(还因为这不是跨平台的要求)。。我认为您可以使用外部本机API与windows注册表(如)交互,并检索所需信息从Java获取MS Windows安装的应用程序,java,Java,是否可以从使用java的windows vista计算机上获取已安装应用程序的列表(如un install programs中的列表)?如果您是指已安装的应用程序,我认为直接使用java SDK是不可能的(还因为这不是跨平台的要求)。。我认为您可以使用外部本机API与windows注册表(如)交互,并检索所需信息 相反,如果您想从Java程序中获取所有正在运行的应用程序,您可以按说明解析tasklist.exe输出。这不是一个解决方案,而是一个解决方法 如果不支持外部API,则无法使用java
相反,如果您想从Java程序中获取所有正在运行的应用程序,您可以按说明解析
tasklist.exe
输出。这不是一个解决方案,而是一个解决方法强>
如果不支持外部API,则无法使用java SDK获取windows本机信息。我们可以使用shell命令来获得相同的API,而不是使用外部API(大部分是LGPL许可的,并且不是完全开放的)
要获取已安装软件列表,请使用ProcessBuilder或Runtime.exec运行以下PowerShell命令之一:
获取WmiObject-class Win32|U产品|选择对象-属性名称
-这稍微慢一点!它使用Win32_产品类李>
获取ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*|选择对象DisplayName、DisplayVersion、Publisher、InstallDate
-这更快,可以提供更多详细信息。这使用PS注册表提供程序package Vishal;
package Vishal;
import com.sun.jna.platform.win32.Advapi32Util;
import static com.sun.jna.platform.win32.WinReg.HKEY_LOCAL_MACHINE;
import java.util.ArrayList;
import java.util.TreeMap;
public class GenerateInstalledApplicationList
{
ArrayList<String> getlist()
{
ArrayList<String> arr = new ArrayList();
String [] keys = Advapi32Util.registryGetKeys(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall");
String temp;
for (String key : keys)
{
temp = "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall" + "\\" +key;
TreeMap<String, Object> tr = Advapi32Util.registryGetValues(HKEY_LOCAL_MACHINE,temp);
if(tr.isEmpty())
{
if(!key.contains("Update"))//all the instances of update are not actually installed applications
{
arr.add(key);
}
}
else
{
if(tr.containsKey("DisplayName"))
{
String str = (String) tr.get("DisplayName");
if(!str.contains("Update"))
{
arr.add(str);
}
}
}
}
return arr;
}}
导入com.sun.jna.platform.win32.Advapi32Util;
导入静态com.sun.jna.platform.win32.WinReg.HKEY\u LOCAL\u机器;
导入java.util.ArrayList;
导入java.util.TreeMap;
公共类GenerateInstalledApplicationList
{
ArrayList getlist()
{
ArrayList arr=新的ArrayList();
String[]keys=Advapi32Util.registryGetKeys(HKEY_LOCAL_MACHINE,“软件\\Microsoft\\Windows\\CurrentVersion\\Uninstall”);
字符串温度;
用于(字符串键:键)
{
temp=“Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall”+“\\\”+键;
TreeMap tr=Advapi32Util.registryGetValues(HKEY_LOCAL_MACHINE,temp);
if(tr.isEmpty())
{
if(!key.contains(“Update”)//所有更新实例都不是实际安装的应用程序
{
arr.add(键);
}
}
其他的
{
if(tr.containsKey(“DisplayName”))
{
String str=(String)tr.get(“DisplayName”);
如果(!str.contains(“更新”))
{
arr.add(str);
}
}
}
}
返回arr;
}}
只需复制并粘贴此代码,它将返回所有已安装的应用程序
您唯一需要的是JNAAPI。您所说的“应用程序列表”是什么意思?我想他指的是任务管理器中列出的正在运行的应用程序列表。当你想卸载某个程序时,该列表或列出的已安装程序列表。投票以“不是真正的问题”结束Rafiq,请解释“应用程序列表”@Rafiq是什么意思,当然是@杰克的回答说明了一切。如果你能用C从windows vista中获得应用程序列表,那么你就可以用java获得它。您可能需要通过JNI API访问列表。第二个命令不应该是
Get ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*|选择对象DisplayName、DisplayVersion、Publisher、InstallDate
?是的,谢谢!!打字错误。命令是1。“获取WMIOObject-class Win32_Product |选择Object-Property Name”(这稍微慢一点!它使用Win32_Product class)。2.获取ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall*|选择对象DisplayName、DisplayVersion、Publisher、InstallDate