MSIファイル(Windows Installer Package)を読み込みたい。msifileName と Table Name の 2 つの入力パラメータを取り、MSI テーブルの 1 つであるデータ テーブルを返す関数を以下のように作成しました。
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 の行数と列数は不明です。SO 私は静的に 4 つの列のみを返しています。レコードにある MSI テーブルのすべての行と列を返したいです。
ビューまたはレコードの出力をデータセットに変換してからデータテーブルにバインドする方法を教えてください。または、すべての行と列を返す他の方法はありますか。前もって感謝します。