【问题标题】:How to get list of installed applications using Ruby in Windows?如何在 Windows 中使用 Ruby 获取已安装应用程序的列表?
【发布时间】:2010-10-30 05:09:43
【问题描述】:

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

我正在使用以下几行 ruby​​ 代码来执行此操作,但它不起作用

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

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'

这段代码有什么问题?

【问题讨论】:

标签: ruby windows registry wmi


【解决方案1】:
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'

【讨论】:

    【解决方案2】:
    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 位平台上的工作原理

    【讨论】:

      猜你喜欢
      • 2015-11-19
      • 2016-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-04
      相关资源
      最近更新 更多