獲取MS-Windows上安裝的應用程序是否有可能獲得安裝的應用程序的列表(如從取消安裝程序列表)從Windows Vista計算機與Java?從Java
從Java
回答
如果你的意思安裝的應用程序,我不認爲這是可能通過直接使用Java SDK(也因爲它不是一個跨平臺的要求)..什麼,我覺得你可以做的是使用一個外部原生API與Windows交互註冊表(如jRegistryKey)和檢索所需信息..
相反,如果你想從一個Java程序中的所有運行的應用程序,你可以解析tasklist.exe
輸出解釋here。
不是一個解決方案,但解決方法!
獲取Windows中使用的Java SDK本地信息也不是沒有可能的支持外部的API。我們可以使用shell命令來獲得相同的內容,而不是使用外部API(主要是LGPL許可的並且沒有完全打開)。
爲了得到所安裝的軟件列表,使用的ProcessBuilder或的Runtime.exec運行下面的PowerShell命令之一:
Get-WmiObject -class Win32_Product | Select-Object -Property Name
- 這是有點慢!它使用Win32_Product類。Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate
- 這是更快,可以提供更多的細節。這使用PS註冊表提供程序。
你可以流的這些輸出和處理它。
這只是一個解決方法,它是根據我的分析。由於Java完全獨立於平臺,因此獲取本地信息變得困難,並且必須使用平臺本地工具(如命令shell,電源外殼等)。
不應該第二個命令是'GET-ItemProperty HKLM:\ SOFTWARE \ Wow6432Node \微軟\的Windows \ CurrentVersion \卸載\ * |選擇對象DisplayName,DisplayVersion,Publisher,InstallDate'? – user2035039 2015-01-12 10:01:38
是的,謝謝你!錯誤地鍵入。命令是 1.「Get-WmiObject -class Win32_Product | Select-Object -Property Name」(這有點慢!它使用Win32_Product類)。 2. Get-ItemProperty HKLM:\ Software \ Wow6432Node \ Microsoft \ Windows \ CurrentVersion \ Uninstall \ * |選擇對象DisplayName,DisplayVersion,Publisher,InstallDate – 2015-02-03 15:51:21
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;
}}
只要複製並粘貼此代碼將返回所有安裝的應用程序 只有你需要的就是JNA API。
你是什麼意思的「應用程序列表」? – 2010-11-10 16:25:03
我想他是指任務管理器中列出的正在運行的應用程序列表。這或已安裝的程序列表,當您想要卸載程序。 – 2010-11-10 16:26:04
投票結束爲「不是真正的問題」Rafiq,請解釋你的意思是「應用程序列表」 – OscarRyz 2010-11-10 16:28:57