2010-02-01 2 views
3

.Net으로 MSI 파일을 읽는 방법을 찾았습니다. 그들 중 일부는 Wix와 함께 제공되는 라이브러리를 사용합니다. Java를 사용하여 MSI 데이터를 읽는 방법이 있습니까? 테이블에 액세스하여 텍스트 값을 얻고 싶습니다.Java로 MSI 파일 읽기

답변

1

MSI 파일은 COM 구조화 된 저장 장치입니다. http://en.wikipedia.org/wiki/COM_Structured_Storage

몇 가지 옵션이 있습니다. 다음과 같은 방법으로 액세스 할 수 있습니다. http://poi.apache.org/poifs/index.html

네이티브 MSI API에 액세스하려면 JNI를 사용할 수 있습니다.

또는 vbscript와 같은 것을 사용할 수 있습니다. 스크립트는 stdout으로 원하는 결과를 덤프합니다. 그러면 java 응용 프로그램에서 캡처하고 파싱합니다.

+0

JDIC 프로젝트에서이 packager.jar 파일을 발견했습니다. WinMSIWrapper.dll에 대한 JNI 래퍼가 있습니다. 그러나, 나는 vbscript 접근 방식으로 갔다. – Omar

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 ,"",""); 

적어도 이론적으로. :)

+0

불행히도 java.sql.SQLException이 발생합니다. [Microsoft] [ODBC Microsoft Access Driver] '(알 수 없음)'데이터베이스를 열 수 없습니다. 응용 프로그램이 인식 할 수있는 데이터베이스가 아닐 수도 있고 파일이 손상되었을 수도 있습니다. – Omar

+0

아마도 자바 네이티브 액세스 독자 중 하나 (예 : jackcess)를 시도해보십시오. – jsight

+0

이론 상으로는 효과가 있습니다. 문제는 아마도 MSI 자체 일 것입니다. 표준 Windows Installer MSI가 아닌 경우 실패 할 수 있습니다. – Geno

1

자바를 통해 Windows Installer API을 사용할 수 있습니까?

API는 MSI 파일을 조작하는 유일한 방법입니다. .NET 또는 WiX를 사용하는 경우 이러한 함수 또는 함수를 호출하는 함수를 사용합니다.

MSI의 이진 파일 형식은 문서화되지 않았으며 버전간에 변경 될 수 있으므로 이진 형식을 직접 읽거나 쓰려고하면 머리가 아플 수 있습니다.