gpt4 book ai didi

c# - 在 C# 中使用 msi.dl 从 MSI 表中获取主键

转载 作者:太空宇宙 更新时间:2023-11-03 13:58:28 26 4
gpt4 key购买 nike

我在 c# 中从 msi.dll 调用 get_PrimaryKeys() 函数时遇到问题。我想找出给定 MSI 表中的主键是什么。我使用以下代码:

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),它会给出相同的错误:

COMexception
Member not found. (Exception from HRESULT: 0x80020003 (DISP_E_MEMBERNOTFOUND))

当我使用 msi.dll 中的其他函数时,它们工作正常。

问题是什么?

最佳答案

有一种更简单的方法可以从 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 一起安装)以了解更多信息。

关于c# - 在 C# 中使用 msi.dl 从 MSI 表中获取主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11397192/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com