我在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的其他功能时,它们可以正常工作。
有什么问题?
答案 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);
}
}
所有你需要做的:
Microsoft.Deployment.WindowsInstaller.dll
using Microsoft.Deployment.WindowsInstaller;
名称空间您无需使用WiX构建MSI,以便从DTF中获益。参考DTF.chm(与WiX一起安装)以了解更多信息。