self.win_pkg_ver

in chef/cookbooks/uber_helpers/libraries/win_utils.rb [16:80]


      def self.win_pkg_ver(win_pkg_name)
        require 'win32/registry'
        pkg_version = nil

        
        {
          'HKEY_LOCAL_MACHINE' => [
            'Software\Microsoft\Windows\CurrentVersion\Uninstall',
            'Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall',
            'Software\Wow6464Node\Microsoft\Windows\CurrentVersion\Uninstall',
          ],
          'HKEY_CURRENT_USER' => [
            'Software\Microsoft\Windows\CurrentVersion\Uninstall',
          ],
        }.each do |reg_loc, reg_path|
          
          break unless pkg_version.nil?

          
          reg_path.each do |rpath|
            
            break unless pkg_version.nil?

            
            break unless reg_path_exist?(reg_loc, rpath)

            win32_name = "::Win32::Registry::#{reg_loc}"
            win32_class = Object.const_get(win32_name)
            
            reg = win32_class.open(rpath)
            
            reg.each_key do |key|
              
              break unless pkg_version.nil?

              
              k = reg.open(key)
              begin
                
                pkg_name = k['DisplayName']
                pkg_ver = k['DisplayVersion']
                
                if pkg_name && pkg_ver && pkg_name.include?(win_pkg_name)
                  
                  pkg_version = pkg_ver
                  
                  k.close
                  
                  break
                end
              rescue StandardError
                
                next
              end
              
              break unless pkg_version.nil?

              k.close
            end
            reg.close
          end
        end
        return pkg_version
      end