2010-02-24 3 views
1
이 아직 일반적인 필요가 있어야한다

은 ... 하나에 설치 서버, 웹 헤드에 하나, 개발자 컴퓨터에 하나. 세 세트는 모두 한 대의 컴퓨터에 설치할 수 있으며 평화롭게 공존해야합니다.윅스 및 공유, 버전 구성 요소

어제 나왔던 것처럼 각 구성 요소가 다른 장소에 설치되고 작동하지만 ok,하지만 일부 파일, gac'd 어셈블리 및 레지스트리 설정이 공유되어야하므로 일시적이었습니다. 이제 공유 구성 요소에서 병합 모듈을 만들었습니다.이 새로운 병합 모듈 시나리오는 이상적인 조건에서 설치하는 동안 올바르게 작동하며 단일 msi의 주요 업그레이드를 모두 알아 냈습니다.

설치하는 msi의 병합 모듈 버전이 다른 msi의 이미 설치된 버전의 버전보다 낮은 경우 msi를 설치하는 중 문제가 발생합니다. 새 버전은 이전 버전으로 덮어 씁니다. 또한 3 msis 중 하나의 설치 해제 루틴이 나면 공유 된 항목은 다른 설치된 구성 요소에서 여전히 사용 중이더라도 제거됩니다.

대부분의 경우이 동작이 나타나는 이유를 이해하지만 설치 프로그램 구성 방법을 이해하지 못하기 때문에 이러한 구성 요소를 공유 구성 요소에 대한 별도의 설치 프로그램없이 공유 할 수 있습니다 . 또한 큰 설치 프로그램을 원하지 않습니다.

내가 원하는 것은 병합 모듈의 구성 요소의 최신 버전이 빌드 ​​타임에 사용 가능했다는 것을 3 인스톨러가 포함하고 있다는 것입니다. 설치시 최신 버전의 공유 구성 요소가 설치된 경우 덮어 쓰지 마십시오. 제거 (및 업그레이드) 시간에 추적해야하는 참조 횟수는 공유 항목을 제거해야하는지 여부를 결정합니다.

병목 파일의 중요한 부분은 다음과 같습니다. 병합 모듈의 버전 번호 ("wxy"의 y)가 빌드마다 증가하고 패키지 ID는 고정 된 채로 유지됩니다. 구성 요소는 Shared="yes"입니다.

레지스트리에 다양한 버전 번호를 저장하기 시작했습니다. 레지스트리의 버전 번호가 없거나 낮은 경우에만 조건부로 병합 모듈 기능을 설치할 수 있다고 생각했습니다. 그러나 조건부 인수는 문서를 참조하여 w.x.y.z를 올바르게 평가할 수 없습니다. 설명서에서는 AppSearch를 제안하지만 AppSearch RegistrySearch는 버전 번호 비교가 아닌 존재 여부 만 확인할 수 있습니다. 분명히 FileSearch는 가능하지만 어셈블리 파일 버전 번호는 각 빌드마다 증가하지 않습니다.

그리고 저는 MergeModules에 많은 문제가 있습니다 - 어쩌면 이들이있을 수 있습니다 - 그러나 wixlibs는 이러한 문제에 대한 해결책을 제시하지 못하는 것 같습니다.

그래서 병합 모듈 버전 관리를 수행하는 올바른 방법은 무엇입니까 ??? 아마존에서 "병합 모듈 버전 관리"라는 목차 항목이 있지만 책이 절판 된 책을 발견했습니다. :-P

+0

나는 메일 링리스트 윅스 - 사용자에게이 질문 크로스 게시물을 제안한다. – saschabeaumont

+0

@JasonKleban 당신은 이것에 대한 해결책을 찾은 것을 기억합니까? 나는이 같은 문제가있어 좋은 정보를 찾을 수없는 것 같습니다. – tjernigan

답변

1

우리가 원하는 - 항상 공유 구성 요소의 최상의 버전이 설치되어 있습니다 -이 동작은 MSI 4.5에서만 지원됩니다. 어쩌면 이것은 WiX 자체의 문제는 아니지만 WiX에 대해서는 거의 알지 못합니다.

msidbComponentAttributesShared (0x0800) 특성을 공유 구성 요소의 구성 요소 테이블에 설정해야합니다. 아마도 Orca와 함께 MSM을 확인할 수 있습니다.

나는이 블로그 게시물은 그것에 대해 뭔가를 언급 생각 (하지만 여기 당신을 위해 큰 도움이 없을 것입니다) : http://blogs.msdn.com/windows_installer_team/archive/2008/03/29/windows-installer-4-5-servicing-enhancements-shared-components-and-patch-uninstall.aspx

+0

좋은 생각이지만, WiX에서 이것을 적용하는 방법을 모르겠습니다. +1 –

관련 문제