2016-08-09 2 views
0

문제 : 두 제품 설치 관리자 (AB)에는 동일한 경로에 설치된 공유 구성 요소 집합이 있습니다. A에는 v1 공유 구성 요소가 포함되고 B에는 v2가 포함됩니다.어떻게 WIX에서 공유 구성 요소에 대한 종속성을 정의합니까?

그러나 설치 프로그램 B에는 v2 공유 구성 요소가 종속되어있는 추가 공유 구성 요소도 포함되어 있습니다.

두 가지를 모두 설치하면 공유 구성 요소의 카운트가 2가됩니다. 단, 카운트가 1 인 새 공유 구성 요소는 제외됩니다. 설치자 B이 제거되면 새 구성 요소는 카운트가 감소 될 때 제거되지만 다른 공유 구성 요소는 다운 그레이드되지 않으므로 누락 된 DLL로 인해 실패합니다.

WIX에서이 종속성을 표현하거나 다른 방법으로 문제를 해결할 수있는 방법이 있습니까?

기존 리소스에 새 리소스를 추가하여이 문제를 해결할 수 있었지만 경전에서는 '하나의 파일, 하나의 구성 요소'라고 명시했습니다.

+0

기존 구성 요소에 새 DLL을 추가하여 키 패스 파일을 동일하게 유지함으로써이를 해결했습니다. 즉, 제품을 임의의 순서로 제거 할 수 있습니다. – Robin

답변

1

당신이 시도 할 수있는 몇 가지 있지만, A와 B 모두가 이미 배포 된 경우 당신이 언급하지 않은 몇 가지 제약이있을 수 있습니다 :

  1. 당신은 누락을 추가하는에 패치를 만들 수 Dll, 기존 구성 요소에 동일한 구성 요소 ID 등을 사용하여 추가합니다. 패치를 설치할 때 REINSTALL = [해당 기능 이름]을 사용해야합니다 (기본값 일 수있는 REINSTALL = ALL). A 로의 업그레이드는 주요 업그레이드를 포함하여 문제를 해결할 수 있지만 A가 유지 관리되지 않는 기존 제품 인 경우 허용되지 않는 것은 아닙니다.

  2. 별도의 새 MSI, 동일한 구성 요소 ID 등으로 해당 DLL을 설치할 수 있으며 B 및 새 MSI를 설치하기 위해 번들을 사용할 수 있습니다. 귀하의 Dll은 이제 2 개의 참조 카운트를 가지며, 하나는 B에 대한 것이고 다른 하나는 새로운 MSI에 대한 것입니다. 새로운 MSI에는 A가 있고 B가없는 경우 제거를 금지하는 논리가 있습니다. 또는 작동 할 종속성 체인이있을 수 있습니다.

+0

흥미 롭습니다. A는 이미 널리 배포되어 있으므로 옵션 1을 사용할 수 없습니다. 2는 많은 일과 지식이 전달되는 것처럼 느낍니다. 가장 안전한 솔루션은 DLL을 기존 구성 요소에 추가하는 것일 수 있습니다. 순서에 벗어난 제거는 파일이 남겨진다는 것을 의미합니다. 그러나 거대하지 않고 편협함은 실제 오류보다 덜 성가신 것입니다. 귀하의 제안에 감사드립니다! – Robin

관련 문제