使用ruby在Windows上查询已安装的软件

时间:2011-03-24 20:09:09

标签: ruby windows registry

我想在Windows机器上查询所有已安装的软件。我找到了另一篇类似here的帖子。

我稍微修改了代码:

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

这给我一些信息,但我想获得有关该软件的其他信息。例如,拥有安装日期,许可证信息等非常棒。

我对红宝石很新。我怎么知道k的索引或键是什么?显然,“DisplayName”是一个,但我如何找到其他人?有没有更好的方法来以编程方式获取此信息?

1 个答案:

答案 0 :(得分: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",

等等。