新しいビジュアル スタジオ プロジェクトを作成しc:\windows\system32\msi.dll
、次のコードへの参照を追加して使用して、msi ファイル内のファイル数を読み取ります。
Type installerType = Type.GetTypeFromProgID("WindowsInstaller.Installer");
var installer =
(WindowsInstaller.Installer)Activator.CreateInstance(installerType);
var msi = installer.OpenDatabase(@"path\to\some\file.msi", 0);
var fileView = msi.OpenView("SELECT FileName FROM File");
fileView.Execute(null);
int fileCount = 0;
while (fileView.Fetch() != null)
{
fileCount++;
}
Console.WriteLine(fileCount);
このコードはWindowsInstaller.Installer
、Windows インストーラー自動化 API のエントリ ポイントである COM オブジェクトを使用します。完全なリファレンス ドキュメントを参照してください。
編集: どうやら wix には、msi.dllC:\program files\Windows Installer XML v3\sdk
をラップするマネージド アセンブリ (in) が付属しています。これは、ロブが答えで「DTF」と呼んでいるものだと思います。Microsoft.Deployment.WindowsInstaller アセンブリと名前空間の型を使用すると、コード サンプルが次のように簡略化されます。
var database = new Database(@"\path\to\some\file.msi");
var list = database.ExecuteQuery("SELECT FileName FROM File");
Console.WriteLine(list.Count);