2012-01-11 3 views
0

기본적으로 특정 하드웨어가 설치되어 있는지를 확인하기 위해 devcon.exe (Windows 하드웨어 관리자의 명령 줄 버전)를 실행할 수있는 WIX msi를 빌드하려고합니다. 그렇다면 msi A를 설치하고, msi B를 설치하십시오 (A와 B는 이미 별도의 msi 패키지로 존재하므로 하드웨어를 기반으로 자동 선택 설치가 필요합니다).선택 설치를 위해 WIX msi에서 임베디드 도구를 실행하려고 시도했습니다.

현재 WIX SDK를 설치했으며 msi를 올바르게 빌드하는 WIX 프로젝트를 만들었습니다. CustomActions를 실행하여 notepad.exe를 실행하는 것과 같은 간단한 작업을 수행 할 수 있습니다.

첫 번째 문제 : 디렉토리에 설치하지 않을 파일을 설치 프로그램에 패키지하는 방법을 찾는 데 어려움이 있습니다. 나는 그것에 대한 참조를 찾았지만 아무 것도 그것을 명시 적으로 언급하지 않았다. 호스트 드라이브에 설치하지 않으면 'Directory'태그 안에 넣을 필요가 없습니다. 맞습니까?

두 번째 문제 : devcon.exe는 (내가 잘못하면 나를 교정 할 수 있음) 결과가 바뀌는 것처럼 보입니다. 아마도 많은 일을하고, 하드웨어 장치의 존재 여부에 따라 제한됩니다. 그래서 만약 내가 그것을 임베디드 얻을 수 있고 그것을 실행하려면, 어떻게 든 표준 출력 스트림에 출력을 가져 가야하고, 내가 찾고있는 특정 값에 대해 구문 분석해야합니다.

물론 파싱을 수행 할 수있는 배치 파일을 가지고 있고 내가 알아야 할 환경 변수를 설정했기 때문에 더 쉬울 것입니다.하지만 둘 다 포함 할 수 있다면, 임베디드 devcon.exe를 참조하도록 배치 파일을 얻은 다음 WIX에서 변수를 읽거나 어쩌면 WIX에서 하나 (또는 ​​속성)를 설정 한 다음 배치 파일에서 설정할 수 있습니까?

어쩌면 나는 dll 사용자 지정 작업을 대신 만들어야합니까? dll 사용자 정의 액션에서 임베디드 실행 파일을 실행할 수 있습니까? 그런 다음 devcon.exe를 실행하고 거기에서 모든 구문 분석을 수행 한 다음 간단히 윅스 변수 또는 속성을 설정하여 다음에 수행 할 작업을 선택할 수 있습니다.

세 번째 문제 : 한 msi를 다른 msi에서 실행할 수 있습니다. 나는 아직까지는 안되지만, (http://softwareinstall.blogspot.com/2008/06/fun-with-msiembeddedchainer.html) 유망 해 보였습니다. 아직. 한 번에 하나의 문제는, 나는 확실히 이미 충분히 :)있어

답변

0

좋아, 첫 번째 문제는 해결된다 :

<Binary Id="Devcon" SourceFile="D:\Programming\Device_Selection\Device_Selection\devcon.exe"/> 
<CustomAction Id="RunDevcon" BinaryKey="Devcon" ExeCommand="resources *vendor*device*" Return="check" Execute="deferred" Impersonate="no" /> 

이것은하여 devcon.exe 도구가 설치에 포함되었는지, 내가 할 수있는 그 관리자 모드로 실행하십시오 (가장을 "아니오"로 지정하고 실행을 "지연"으로 지정하지 않으면 작동하지 않음).

다음으로해야 할 일은 devcon이 보통 콘솔 (즉, cmd 창)에 보내는 출력을 읽고 정보를 위해 구문 분석 할 수 있어야합니다. 출력을 캡처하는 방법이 있습니까?

0

두 번째 문제는 devcon.exe를 시작하고 출력을 읽고 구문 분석하는 EXE 또는 DLL 사용자 지정 동작을 만듭니다. devcon.exe 자체는 EXE/DLL의 리소스에 저장하고 시작하기 전에 임시 디렉토리에 압축을 풀 수 있습니다.

DLL을 선택하면 MSI 공개 속성을 변경할 수 있습니다. 그렇게하면 MSI에서 다음에 수행 할 작업을 제어 할 속성을 설정할 수 있습니다.

EXE를 선택하면 종료 코드 만 있으면됩니다. 내가 아는 한 MSI에서 실제로 할 수있는 일이 많지 않습니다.


MSI 설치 체인 연결은 권장되지 않습니다. 두 드라이버를 하나의 패키지에 임베드하고 devcon.exe 검색의 결과로 설정된 속성에 따라 설치할 구성 요소를 선택할 수 있습니다.


또 다른 방법은 devcon.exe를 실행하고 설치할 패키지를 결정하는 부트 스트 래퍼 EXE를 만드는 것입니다. 그런 다음 올바른 MSI 패키지를 설치하기 만하면됩니다.

관련 문제