用Java读取MSI文件
答
MSI文件是COM结构化存储。 http://en.wikipedia.org/wiki/COM_Structured_Storage
有几个选项。您可以尝试使用类似如下的方式访问它: http://poi.apache.org/poifs/index.html
您可以使用JNI访问本机MSI API。
或者,你可以掏出来的东西像一个VBScript。该脚本将您想要的结果转储到stdout,然后在java应用程序中捕获并解析结果。
答
.MSI基本上是一个数据库。如果您可以使用Java的JdbcOdbc驱动程序读取MS Access .MDB文件,则可以使用相同的代码来打开.MSI,然后读取它的表格。
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String msiFileName= "d:/java/test.msi";
String connectString = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=";
connectString += msiFileName.trim() + ";DriverID=22;READONLY=true}";
Connection con = DriverManager.getConnection(connectString ,"","");
至少在理论上。 :)
答
你能否通过Java使用Windows Installer API?
的API操纵MSI文件支持的唯一途径。如果您使用的是.NET或WiX,那么您将使用这些调用这些函数或函数的函数或函数。
MSI的二进制文件格式是无证和版本之间可能会发生变化,所以试图读/写的二进制格式直接只是想给你一个真实的头痛。
我从JDIC项目中找到了这个packager.jar文件。它具有WinMSIWrapper.dll的JNI包装。但是,我使用vbscript方法。 – Omar 2010-02-05 21:07:04