2011-03-24 49 views
1

我想查詢windows機器上所有已安裝的軟件。我發現另一個文章正在做類似的工作here用ruby在windows上查詢已安裝的軟件

我稍微修改了代碼:

require 'win32/registry' 

Win32::Registry::HKEY_LOCAL_MACHINE.open('Software\Microsoft\Windows\CurrentVersion\Uninstall') do |reg| 
    reg.each_key do |key1,key2| 
     k = reg.open(key1) 

     puts k["DisplayName"] rescue "?" 
     puts k["DisplayVersion"] rescue "?" 
     puts k["Publisher"]  rescue "?" 
     puts k["URLInfoAbout"] rescue "?" 
     puts 
    end 
end 

這讓我的一些信息,但我想,以獲取有關該軟件的其他信息。例如,擁有安裝日期,許可證信息等會很棒。

我對ruby非常陌生。我怎麼知道k的索引或密鑰是什麼?顯然,「DisplayName」是一個,但我如何找到其他人?有沒有更好的方式去獲得這種信息編程?

回答

3

如果你只是想了解該軟件的完整信息,您可以使用此:

require 'win32/registry' 
require 'pp' # for pretty print 

Win32::Registry::HKEY_LOCAL_MACHINE.open('Software\Microsoft\Windows\CurrentVersion\Uninstall') do |reg| 
    reg.each_key do |key1,key2| 
     k = reg.open(key1) 
     pp k.inject([]) {|info, data| info << data} 
    end 
end 

,你會得到這樣的事情:

["UninstallString", 
    1, 
    "\"C:\\WINDOWS\\$NtUninstallKB2393802$\\spuninst\\spuninst.exe\""], 
["TSAware", 4, 1], 
["NoModify", 4, 1], 
["InstallDate", 1, "20110313"], 
["Publisher", 1, "Microsoft Corporation"], 
["NoRepair", 4, 1], 
["HelpLink", 1, "http://support.microsoft.com?kbid=2393802"], 
["URLInfoAbout", 1, "http://support.microsoft.com"], 
["DisplayVersion", 1, "1"], 
["ParentKeyName", 1, "OperatingSystem"], 
["ParentDisplayName", 

等。

+0

謝謝!這絕對有幫助。 – Ryan 2011-03-25 17:19:33