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