2016-10-21 13 views
1

설치 프로그램을 작성하려고하는 두 가지 제품이 있습니다. 두 제품 모두 요구 사항으로 세 번째 제품 번들이있는 wix 번들입니다.Wix ExePackage 나란히 설치 제거

이상적으로 당신이 하나를 설치하면 일이 원하는 것입니다 : 제품 3 다음 설치되어 있지 않은 경우

  • 이 있어야한다.
  • Product3이 설치되고 설치된 버전이 더 높거나 같으면 아무 것도 수행하지 않습니다.
  • Product3이 설치되고 설치된 버전이 더 낮은 버전이면 업그레이드하십시오.
  • 설치 제거 및 product1 또는 2가 아직 설치되어있는 경우 product3을 설치 제거하지 마십시오.

지금까지 나는 이러한 점들 중 일부를 완전히 극복 할 수 있었지만 동시에 모두를 극복 할 수 없었습니다.

원래 ProductSearch를 사용하여 설치된 버전을 얻고 InstallCommand을 사용해 보았습니다. 그러나 installcommand가 "요청 된 설치 상태"와 더 유사하기 때문에 설치를 제거 할 때 문제가 발생했습니다. 따라서 동일한 버전을 발견하면 설치를 원하지 않으면 실제로 제거하기 시작합니다.

나는이 비슷한 대답을 살펴했다 :

How to avoid uninstalling previously installed ExePackage (redistributables) while installing a WiX Bundle?

provideskeyrequires 요소를 사용하여 제안 그러나 나는 무엇이든지 그들에 유용한 문서를 찾을 수 없습니다. 나는 그것으로 실험을 시도했지만 전혀 아무것도하지 않는 것 같습니다.

나는 RelatedBundle을 보았지만 그것이 내가 무엇인지 잘 모르겠습니다. 핫픽스 시스템을 대상으로 한 것 같습니다.

오히려 단순한 기능인 것처럼 보이기 때문에 사용자 지정 작업에 의존하지 않고이 작업을 수행 할 수있는 방법이 있었으면합니다.

답변

1

많은 시행 착오 끝에 DependencyExtension이 작동하는 방법을 알아 냈습니다.

아래 예제에서 ProductC는 Wix 번들 실행 파일입니다. 이 번들에는 MSI 파일이 포함되어 있습니다. 나는 이미 설치되어 있는지 감지하기 위해 productSearch를 사용하여 해당 MSI 파일 (BUNDLE이 아님)의 업그레이드 코드를 찾습니다.

번들 프로젝트 A와 B에 대한 파일에서

: 어떤 배열

<Wix xmlns:dep="http://schemas.microsoft.com/wix/DependencyExtension" 
    xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"> 
    <Bundle> 
     <util:ProductSearch Id="ProductCInstallSearch" 
          UpgradeCode="{ProductC_MSI_UpgradeCode_GUID}" 
          Variable="ProductCInstalled" 
          Result="state"/> 
     <dep:Requires Id="ProductCRequired" ProviderKey="ProductC"/> 
     <Chain> 
      <PackageGroupRef Id="ProductC_pkg"/> 
     </Chain> 
    </Bundle> 
    <Fragment Id="Required_Pkgs"> 
     <PackageGroup Id="ProductC_Pkg"> 
      <ExePackage Id="ProductC_Bundle" 
         Permanent="no" 
         DetectCondition="NOT ProductCInstalled = 2" 
         InstallCommand="/quiet" 
         UninstallCommand="/uninstall /quiet"> 
       <dep:Provides Key="ProductC" 
           Version="0.0.0.0"> 
        <dep:RequiresRef Id="ProductCRequired"/> 
       </dep:Provides> 
      </ExePackage> 
     </PackageGroup> 
    </Fragment> 
</Wix> 

이제 설치할 수있는 A와 B 및 제거 제품 C 만 제거 할 때 마지막이 제거됩니다.