如何在Windows中使用Ruby获取已安装应用程序的列表?

时间:2010-10-30 05:09:44

标签: ruby windows registry wmi

我知道使用wmi查询WIN32_product可以读取已安装应用程序的列表,但该列表与控制面板下的添加/删除程序列表不同。 另一种方法是在Windows注册表中阅读Software\Microsoft\Windows\CurrentVersion\Uninstall吗?

我使用以下几行ruby代码来执行此操作但它无法正常工作

对于这个例子,我正在寻找一个名为Branding的软件(它显示我通过我的Windows 7 PC中的注册表)

Win32::Registry::HKEY_LOCAL_MACHINE.open('Software\Microsoft\Windows\CurrentVersion\Uninstall\Branding') do |reg|
  reg_typ, reg_val = reg.read('')
  return reg_val
end
运行这段代码后出现

错误消息

win32/registry.rb:528:in `open': The system cannot find
the file specified. (Win32::Registry::Error)
        from win32/registry.rb:608:in `open'

这段代码出了什么问题?

2 个答案:

答案 0 :(得分:2)

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

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

虽然要注意:'Software \ Wow6432Node \ Windows \ CurrentVersion \ Uninstall'

答案 1 :(得分:0)

key = 'Software\Microsoft\Windows\CurrentVersion\Uninstall'
reg_type = Win32::Registry::Constants::KEY_READ | Windows::Registry::KEY_WOW64_64KEY

Win32::Registry.open(Win32::Registry::HKEY_LOCAL_MACHINE,key,reg_type) do |reg|
 reg.each_key do |key|
     k = reg.open(key)

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

查看此link以获取有关注册表如何在64位平台上运行的说明