using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.IO;using WindowsInstaller; namespace msiReadTest1{ [System.Runtime.InteropServices.ComImport(), System.Runtime.InteropServices.Guid("000C1090-0000-0000-C000-000000000046")] class Installer { } class Program { static void Main(string[] args) { WindowsInstaller.Installer ins = (WindowsInstaller.Installer)new Installer(); string strFileMsi = @"C:\Projects\msiReadTest1\msiReadTest1\bin\Debug\test.msi"; Database db = ins.OpenDatabase(strFileMsi, WindowsInstaller.MsiOpenDatabaseMode.msiOpenDatabaseModeReadOnly); View vw = db.OpenView(@"Select * FROM 'Property'"); // I'd like to pull from other tables besides Property as well vw.Execute(null); Record rcrd = vw.Fetch(); while (rcrd != null) { Console.WriteLine(rcrd.get_StringData(1).Split('|')[1]); rcrd = vw.Fetch(); } vw.Close(); } }}