我有以下JNA接口:

public interface MsiVersion extends StdCallLibrary {

  MsiVersion INSTANCE = (MsiVersion)Native.loadLibrary( "msi", MsiVersion.class,
      W32APIOptions.UNICODE_OPTIONS );

  int MsiOpenDatabase( String szDatabasePath,
                       String szPersist,
                       Memory phDatabase );
}


如果我像这样打开一个MSI,一切都很好:

int oparationResult = MsiVersion.INSTANCE.MsiOpenDatabase( "example.msi", "0",
    dbPointerMemory );


如果我尝试打开补丁,则会收到错误代码110。在文档中,我发现我应该以某种方式将MSIDBOPEN_READONLY + MSIDBOPEN_PATCHFILE作为“ szPersist”而不是“ 0”传递,如果我想打开补丁。

我试图基于此调用以下内容:http://archives.miloush.net/michkap/archive/2006/04/16/577108.html

int oparationResult = MsiVersion.INSTANCE.MsiOpenDatabase( "example.msp", "32",
    dbPointerMemory );


但是仍然会收到错误代码110。有人可以帮助我找到正确的参数吗?

谢谢,
巴林特

最佳答案

您可能会遇到此处描述的Ansi / Unicode问题:

https://blogs.msdn.microsoft.com/heaths/2006/03/31/opening-patch-files-when-compiled-for-unicode/

但要确保您需要说出自己是否处于Unicode模式以及MSIDBOPEN_PATCHFILE的实际值

10-08 02:07