2010-11-10 57 views
2

獲取MS-Windows上安裝的應用程序是否有可能獲得安裝的應用程序的列表(如從取消安裝程序列表)從Windows Vista計算機與Java?從Java

+3

你是什麼意思的「應用程序列表」? – 2010-11-10 16:25:03

+0

我想他是指任務管理器中列出的正在運行的應用程序列表。這或已安裝的程序列表,當您想要卸載程序。 – 2010-11-10 16:26:04

+0

投票結束爲「不是真正的問題」Rafiq,請解釋你的意思是「應用程序列表」 – OscarRyz 2010-11-10 16:28:57

回答

4

如果你的意思安裝的應用程序,我不認爲這是可能通過直接使用Java SDK(也因爲它不是一個跨平臺的要求)..什麼,我覺得你可以做的是使用一個外部原生API與Windows交互註冊表(如jRegistryKey)和檢索所需信息..

相反,如果你想從一個Java程序中的所有運行的應用程序,你可以解析tasklist.exe輸出解釋here

2

不是一個解決方案,但解決方法!

獲取Windows中使用的Java SDK本地信息也不是沒有可能的支持外部的API。我們可以使用shell命令來獲得相同的內容,而不是使用外部API(主要是LGPL許可的並且沒有完全打開)。

爲了得到所安裝的軟件列表,使用的ProcessBuilder或的Runtime.exec運行下面的PowerShell命令之一:

  1. Get-WmiObject -class Win32_Product | Select-Object -Property Name - 這是有點慢!它使用Win32_Product類。
  2. Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate - 這是更快,可以提供更多的細節。這使用PS註冊表提供程序。

你可以流的這些輸出和處理它。

這只是一個解決方法,它是根據我的分析。由於Java完全獨立於平臺,因此獲取本地信息變得困難,並且必須使用平臺本地工具(如命令shell,電源外殼等)。

+0

不應該第二個命令是'GET-ItemProperty HKLM:\ SOFTWARE \ Wow6432Node \微軟\的Windows \ CurrentVersion \卸載\ * |選擇對象DisplayName,DisplayVersion,Publisher,InstallDate'? – user2035039 2015-01-12 10:01:38

+0

是的,謝謝你!錯誤地鍵入。命令是 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

0
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。