Beispiel #1
0
		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;
		}
Beispiel #2
0
        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);
        }