MsiOpenDatabase不打开msi文件(错误代码110)

本文关键字:错误代码 文件 msi MsiOpenDatabase | 更新日期: 2023-09-27 18:08:27

我在这里有一个奇怪的效果。我试图使用DTF程序集打开现有的msi文件,它返回错误代码110 (ERROR_OPEN_FAILED)。如果我试图通过MsiGetLastErrorRecord获得最后一个错误-它返回0,即没有错误。

作为实验,我尝试使用WinAPI直接打开相同的文件(从c++应用程序),它工作得很好。

据我所知,DTF被很多人使用,我想它没有错误,所以它应该是我的系统/配置的一些问题。

我正在使用Windows 10和VS2012与。net 4.5

有什么提示吗?

PS:实际上,从一开始我就试图自己互操作WinAPI,我得到了这个结果。使用DTF是为了说明我最终错误的互选。

Update:我已经检查了ProcessMonitor的执行,并且已经看到CreateFile在共享违规时失败了:期望访问:通用读/写性格:开放选项:同步IO非警报、非目录文件属性:NShareMode:阅读AllocationSize: n/a

更新2:这是最愚蠢的错误之一。问题是由于从设计模式触发了打开DB的属性。现在问题解决了。谢谢大家的帮助!

MsiOpenDatabase不打开msi文件(错误代码110)

从DTF帮助文件:

using (Database db = new Database("product.msi", DatabaseOpenMode.ReadOnly))
    {        string value = (string) db.ExecuteScalar(
        "SELECT `Value` FROM `Property` WHERE `Property` = '{0}'", propName);
    }

这显然应该在只读模式下工作,无论文件是否在其他地方被锁定。还有一个方便的InstallPackage类,它在压缩或未压缩产品布局的上下文中处理文件和机柜:

using (InstallPackage pkg = new InstallPackage("d:'builds'product.msi",
DatabaseOpenMode.Transact))     
{
   //(find the rest of the sample in the DTF help file)
}

我会尝试这两个类与不同的DatabaseOpenModes (ReadOnly transaction DirectCreateCreateDirect)。