Hello,

Micke Micke wrote:
> 
> I wonder if i have write my method in a bad way.
> 
> Any ideas ?
> 
> Method:
> 
> def GetProperty(msiPath, property)
>     begin
>         require 'win32ole'
>         msiInstaller = WIN32OLE.new('WindowsInstaller.Installer')
>         db = msiInstaller.OpenDatabase(msiPath, 0)
>         view = db.OpenView("SELECT Value FROM Property WHERE Property =
> '#{property}'")
>         view.Execute()
>     rescue RuntimeError
>         return "ERROR"
>     end
>         record = view.Fetch()
>         if record != nil then
>             return record.StringData(1)
>         else
>             return 0
>         end
> end

I have not written script using WindowsInstaller, but I think:
(1) msiInstaller should be created only at once if you could.
(2) view.close() should be called before return from GetProperty.
     (I can't find how to close db(Database) object.)

(1)
   require 'win32ole'
   class Installer
     @@msiInstaller = nil
     def self.create
       if !@@msiInstaller
          @@msiInstaller = WIN32OLE.new('WindowsInstaller.Installer')
       end
       @@msiInstaller
     end
   end

   def GetProperty(msiPath, property)
     begin
       msiInstaller = Installer.create
         ...
(2)
          record = view.Fetch()
          val = 0
          if record != nil then
              val = record.StringData(1)
          else
              val = 0
          end
          view.close
          return val

Hope this helps.
   Regards,
   Masaki Suketa