我想读取 MSI 文件(Windows 安装程序包)。我编写了一个如下函数,它接受两个输入参数:msifileName 和表名,并返回一个数据表,它是 MSI 表之一。
public DataTable ReadMsiPropertyTable(string msiFile, string tableName)
{
Type installerType = Type.GetTypeFromProgID("WindowsInstaller.Installer");
WindowsInstaller.Installer installer = (WindowsInstaller.Installer)Activator.CreateInstance(installerType);
Database database = installer.OpenDatabase(msiFile, 0);
string sqlQuery = String.Format("SELECT * FROM {0}",tableName);
View view = database.OpenView(sqlQuery);
view.Execute(null);
Record record = view.Fetch();
DataTable msiPropertyTable = new DataTable();
msiPropertyTable.Columns.Add("Column1", typeof(string));
msiPropertyTable.Columns.Add("Column2", typeof(string));
msiPropertyTable.Columns.Add("Column3", typeof(string));
msiPropertyTable.Columns.Add("Column4", typeof(string));
while (record != null)
{
int fieldCount;
fieldCount = record.FieldCount;
msiPropertyTable.Rows.Add(record.get_StringData(0), record.get_StringData(1), record.get_StringData(2), record.get_StringData(3));
record = view.Fetch();
}
return msiPropertyTable;
}
使用上面的代码片段,Record 的行数和列数是未知的。所以我静态地只返回四列。我想返回 MSI 表中记录的所有行和列。
所以请让我知道如何将视图或记录的输出转换为数据集,然后绑定到数据表。或者有没有其他方法可以返回所有的行和列。提前致谢。