使用c#中的msi.dl从MSI表中获取主键

时间:2012-07-09 14:33:11

标签: c# com windows-installer

我在c#中调用来自get_PrimaryKeys()的{​​{1}}函数时遇到问题。 我想资助给定MSI表中的主键是什么。我使用以下代码:

msi.dll

如果我使用Type installerType = Type.GetTypeFromProgID("WindowsInstaller.Installer"); installer = (Installer)Activator.CreateInstance(installerType); database = installer.OpenDatabase(MSIPath, MsiOpenDatabaseMode.msiOpenDatabaseModeTransact); WindowsInstaller.Record data = null; data = database.PrimaryKeys[tableName]; string s = data.get_StringData(1); ,则会出现相同的错误:

database.get_PrimaryKeys(tableName)

当我使用msi.dll的其他功能时,它们可以正常工作。

有什么问题?

1 个答案:

答案 0 :(得分:1)

从C#代码查询MSI数据库有一种更简单的方法。 WiX Toolset包括一个设计良好的方便的.NET API,名为DTF(部署工具基础),可以编写以下内容(C#):

  using (var database = new Database("path\\to\\package.msi", DatabaseOpenMode.ReadOnly))
  {
    var table = database.Tables["someTableName"];
    foreach (var column in table.PrimaryKeys)
    {
      Console.WriteLine("The table {0} defines {1} as primary key", table.Name, column);
    }
  }

所有你需要做的:

  • 安装WiX Toolset
  • 在您的C#项目中引用Microsoft.Deployment.WindowsInstaller.dll
  • 添加using Microsoft.Deployment.WindowsInstaller;名称空间

您无需使用WiX构建MSI,以便从DTF中获益。参考DTF.chm(与WiX一起安装)以了解更多信息。