我找到了如何用.Net读取MSI文件。其中一些使用Wix附带的一些库。有没有办法使用Java读取MSI数据。我想访问表并获取文本值。
答案 0 :(得分:1)
.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 ,"","");
至少在理论上。 :)
答案 1 :(得分:1)
MSI文件是COM结构化存储。 http://en.wikipedia.org/wiki/COM_Structured_Storage
有几个选择。您可以尝试使用以下内容访问它: http://poi.apache.org/poifs/index.html
您可以使用JNI访问本机MSI API。
或者,你可能会发现像vbscript这样的东西。该脚本会转储您想要stdout的结果,然后您可以在java应用程序中捕获并解析它。
答案 2 :(得分:1)
您可以通过Java使用Windows Installer API吗?
API是唯一受支持的操作MSI文件的方法。如果您使用的是.NET或WiX,则可以使用这些函数或函数来调用它们。
MSI的二进制文件格式没有记录,可能会在版本之间发生变化,因此尝试直接读取/写入二进制格式只会给您带来真正的麻烦。