我知道使用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'
这段代码出了什么问题?
答案 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位平台上运行的说明