我有以下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的实际值