private static List<MsiColumnDefinition> ReadColumnDefinitions(IntPtr viewHandle) { List<MsiColumnDefinition> columnDefinitions = new List<MsiColumnDefinition>(); Msi.ViewExecute(viewHandle, IntPtr.Zero); IntPtr recordHande; // Get column names Msi.ViewGetColumnInfo(viewHandle, Msi.MsiColInfoType_Names, out recordHande); try { uint columnCount = Msi.RecordGetFieldCount(recordHande); for (int i = 0; i < columnCount; i++) { MsiColumnDefinition columnDefinition = new MsiColumnDefinition(); columnDefinition.Name = Msi.RecordGetString(recordHande, (uint)(i + 1)); columnDefinitions.Add(columnDefinition); } } finally { Msi.CloseHandle(recordHande); } // Get column types Msi.ViewGetColumnInfo(viewHandle, Msi.MsiColInfoType_Types, out recordHande); try { uint columnCount = Msi.RecordGetFieldCount(recordHande); for (int i = 0; i < columnCount; i++) { string columnTypeDescriptor = Msi.RecordGetString(recordHande, (uint)(i + 1)); char columnTypeIndicator = columnTypeDescriptor[0]; switch (Char.ToLower(columnTypeIndicator)) { case 'i': // Integer case 'j': // Temporary integer columnDefinitions[i].DataType = MsiColumnDataType.Integer; break; case 's': // String case 'g': // Temporary string case 'l': columnDefinitions[i].DataType = MsiColumnDataType.String; break; case 'v': // Binary Stream case 'o': // Undocumented. columnDefinitions[i].DataType = MsiColumnDataType.Binary; break; default: throw new NotImplementedException(string.Format("Unexpected column type: '{0}'.", columnTypeDescriptor)); } } } finally { Msi.CloseHandle(recordHande); } return columnDefinitions; }
private static List <MsiColumnDefinition> ReadColumnDefinitions(IntPtr viewHandle) { List <MsiColumnDefinition> columnDefinitions = new List <MsiColumnDefinition>(); Msi.ViewExecute(viewHandle, IntPtr.Zero); IntPtr recordHande; // Get column names Msi.ViewGetColumnInfo(viewHandle, Msi.MsiColInfoType_Names, out recordHande); try { uint columnCount = Msi.RecordGetFieldCount(recordHande); for (int i = 0; i < columnCount; i++) { MsiColumnDefinition columnDefinition = new MsiColumnDefinition(); columnDefinition.Name = Msi.RecordGetString(recordHande, (uint)(i + 1)); columnDefinitions.Add(columnDefinition); } } finally { Msi.CloseHandle(recordHande); } // Get column types Msi.ViewGetColumnInfo(viewHandle, Msi.MsiColInfoType_Types, out recordHande); try { uint columnCount = Msi.RecordGetFieldCount(recordHande); for (int i = 0; i < columnCount; i++) { string columnTypeDescriptor = Msi.RecordGetString(recordHande, (uint)(i + 1)); char columnTypeIndicator = columnTypeDescriptor[0]; switch (Char.ToLower(columnTypeIndicator)) { case 'i': // Integer case 'j': // Temporary integer columnDefinitions[i].DataType = MsiColumnDataType.Integer; break; case 's': // String case 'g': // Temporary string case 'l': columnDefinitions[i].DataType = MsiColumnDataType.String; break; case 'v': // Binary Stream case 'o': // Undocumented. columnDefinitions[i].DataType = MsiColumnDataType.Binary; break; default: throw new NotImplementedException(string.Format("Unexpected column type: '{0}'.", columnTypeDescriptor)); } } } finally { Msi.CloseHandle(recordHande); } return(columnDefinitions); }