Я нашел, как считать файлы MSI с .NET. Некоторые из них пользуются некоторыми библиотеками, которые идут с Wix. Есть ли способ, которым я считал данные MSI с помощью Java. Я хотел бы получить доступ к таблицам и получить текстовые значения.
Файлы MSI являются COM-структурированным хранилищем. http://en.wikipedia.org/wiki/COM_Structured_Storage
существует несколько опций. Вы могли попытаться получить доступ к нему с чем-то вроде этого: http://poi.apache.org/poifs/index.html
Вы могли использовать JNI для доступа к собственным API MSI.
Или, вы могли выйти из оболочки к чему-то как vbscript. Сценарий выводит результаты, которые вы хотите к stdout, который вы затем получаете и анализируете в своем приложении Java.
.MSI - это, по сути, база данных. Если вы можете прочитать .MDB файл MS Access с помощью JdbcOdbc драйвера Java, вы можете использовать тот же самый код, чтобы открыть .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 ,"","");
По крайней мере, в теории. :)
Можно ли использовать API установщика Windows через Java?
API - единственный поддерживаемый способ управления файлами MSI. Если вы используете .NET или WiX, вы будете либо использовать эти функции, либо функции, которые их вызывают.
Формат двоичного файла MSI недокументирован и может меняться между версиями, поэтому попытка чтения / записи двоичного формата напрямую вызовет у вас настоящую головную боль.