문제

설치 시간에 MSI 구성 요소 규칙을 따르지 않는 설치 프로그램이 있습니다. 다음은 시나리오입니다.

OS : 윈도우 7 x64

제품 A GUID "123ABC"가 C : \ Program Files \ Common Files \ Foo로 구성된 구성 요소에 첨부 된 파일 세트를 설치합니다. 구성 요소에는 다음 파일이 있습니다 foo.dll, 버전 1.0.0.0, (Keypath)
foo.sys, 버전 1.0.0.0
Foo.inf, 버전 없음
foo.cat, 버전 없음

제품 B 동일한 구성 요소 GUID "123ABC"에 연결된 동일한 파일 세트를 동일한 경로 C : \ Program Files \ Common Files \ foo에 설치합니다. 구성 요소에는 다음 파일이 있습니다 foo.dll, 버전 1.0.0.1, (키패트)
foo.sys, 버전 1.0.0.0
Foo.inf, 버전 없음
foo.cat, 버전 없음

제품 A가 먼저 설치되고 제품 B는 제품 A의 업그레이드를 수행하지 않으며 구성 요소가 "123ABC"가 포함 된 공통 MSM을 공유합니다. 내 기대는 제품 B가 설치된 경우, MSI는 keypath 버전을 foo.dll 버전과 비교하여 제품 B의 foo.dll이 최신임을 결정합니다. 그런 다음 구성 요소 "123ABC"와 관련된 네 개의 파일 모두 제품 A가 설치 한 디스크의 기존 파일을 덮어 씁니다. 이것은 일어나지 않습니다. (대신 결과 파일 세트입니다. C : \ Program Files \ Common Files \ Foo
foo.dll, 버전 1.0.0.1 (제품 B에서)

foo.sys, 버전 1.0.0.0 (제품 a) foo.inf, 버전 없음 (제품 a)
foo.cat, 버전 없음 (제품 B에서)

DLL과 CAT 파일 만 덮어 씁니다. MSI 로그 파일에서 다음을 볼 수 있습니다.

MSI (s) (4C:F0) [17:29:24:227]: File: C:\Program Files\Common Files\Foo\foo.dll;    Overwrite;  Won't patch;    Existing file is a lower version
MSI (s) (4C:F0) [17:29:24:305]: File: C:\Program Files\Common Files\Foo\foo.sys;    Won't Overwrite;    Won't patch;    Existing file is of an equal version
MSI (s) (4C:F0) [17:29:24:305]: File: C:\Program Files\Common Files\Foo\foo.inf;    Won't Overwrite;    Won't patch;    Existing file is unversioned and unmodified - hash matches source file
MSI (s) (4C:F0) [17:29:24:335]: File: C:\Program Files\Common Files\Foo\foo.cat;    Overwrite;  Won't patch;    Existing file is unversioned and unmodified - hash doesn't match source file
.

키패트가 설치되어야하는지 여부에 따라 MSI 구성 요소가 모든 관련 파일을 설치했습니다. 동일한 구성 요소와 관련된 모든 파일이 개별적으로 비교 될 수있는 것은 무엇입니까?

도움이 되었습니까?

해결책

키패스 상태 구성 요소가 작동할지 여부를 결정합니다.구성 요소 내의 리소스는 규칙을 따릅니다. 예를 들어, 파일은 파일 버전 관리 규칙 .

다른 팁

각 제품이 기본 원가 계산 규칙 (OMUS)을 사용하는 것으로 가정하면 공유 구성 요소가 포함 된 병합 모듈이 작동해야합니다.FWIW는이 병합 모듈을 사용하는 MSI를 만들고 두 제품 모두에 대해 부트 스트 래퍼에 추가하는 것을 고려할 수 있습니다.패치 서비스는이 방법을 깨끗하게 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top