2017-02-13 3 views
0

4 개의 MSI (버전 1.0.0 및 번들 버전 1.0.0)가있는 wix 번들이 있습니다. 저는 이것을 Windows 컴퓨터에 설치하고 ARP에서 WiX 번들을 1.0.0으로 봅니다.wix 번들 만 설치가 변경되었습니다. msi

이제 B와 같이 MSI 중 하나만 변경하고 번들 버전은 1.1.0으로 변경하고 변경된 MSI (B) 버전은 1.1.0으로 변경합니다. 나머지 MSI (A, C, D)는 여전히 1.0.0입니다.

이제 번들을 다시 실행하면 A, C 및 D의 설치가 건너 뛰고 B 만 업그레이드되고 번들 또한 ARP의 버전 1.1.0으로 업데이트됩니다. 하지만 내가 관찰 한 것은 모든 패키지 (A, B, C, D)에 대한 설치가 B가 아니라 자리를 대신 차지한다는 것입니다.

그래서 내 기대가 잘못 되었나요?

이것은 내 번들 코드

<Chain> 

<MsiPackage Id=“A" 

       Cache="no” 

     Vital=“yes" 

       EnableFeatureSelection="no" 

       Permanent="no" Visible="no" 

       ForcePerMachine=“yes” 

      SourceFile = “<>”/> 

    <MsiPackage Id=“B" 

       Cache="no” 

     Vital=“yes" 

       EnableFeatureSelection="no" 

       Permanent="no" Visible="no" 

       ForcePerMachine=“yes” 

      SourceFile = “<>”/> 

</Chain> 

에있을 것입니다 그리고 이것은 내가 개별 MSI에 대한 내 WXS에있는 것입니다. MSI B에 대해서만 버전을 1.1.0로 변경하고 UpgradeCode도 동일하게 유지합니다.

<Product Id="*" UpgradeCode="<GUID which is same across installations>" 
     Version="1.0.0" /> 
<MajorUpgrade DowngradeErrorMessage="New version is present." 

나는 많은 스레드를 보았다 그러나 일반적으로 그들은 모든 MSI의 업그레이드에 대한 그냥 1 MSI 이야기. 무언가가 명확하지 않은 경우 알려 주시고 사전에 귀하의 도움에 감사드립니다.

답변

1

majorUpgrade 요소의 일부에는 AllowSameVersionUpgrades 속성이 있으며 기본값은 no입니다.

의미 "MSI에서 동일한 버전 및 업그레이드 코드 (제품 코드는 다르지만)를 설치하면 두 제품으로 취급 할 수 있으며 yes로 설정하면 WiX에서 msidbUpgradeAttributesVersionMaxInclusive MSI에게 주요 업그레이드와 같은 버전의 제품을 취급하도록 알려주는 속성 "이라고 덧붙였다.

이 속성을 확인하고 문제가 도움이되는지 확인하십시오. 모범 사례는 버전을 모든 msis와 번들로 변경하는 것입니다.이 작업은 제품을 릴리스 할 때 CI/CD 파이프 라인의 일부로 자동 수행됩니다.

+0

또한 Microsoft에서 Orca.exe를 사용하여 이미 해당 도구를 사용하고 있지 않은 경우 MSI를 검사 할 수 있습니다. –

+1

또는 MSI 비교 기능이있는 instedit. –

+0

@ArkadySitnitsky와 BrianSutherland의 의견에 감사드립니다. 나는 AllowSameVersionUpgrades를 yes와 no로 시도했지만 두 경우 모두 모든 MSI를 설치합니다. 내가 원하는 것은 설치 프로그램이 버전이 동일 할 경우 모듈을 건너 뛰고 버전이 클 경우에만 설치하지만 이것이 일어나지 않는 것입니다. – randomuser15995183

1

Burn이 이미 설치된 경우 패키지를 설치하지 않습니다. 그러나 Product/@Id="*"으로 패키지를 다시 작성하면 패키지 ID가 변경됩니다 (제품 코드와 패키지 코드 모두). 그래서 Burn은 새로운 패키지처럼 보이는 것을 설치합니다. 이러한 패키지를 건너 뛰도록하려면 다시 빌드하지 마십시오.

+0

오케이. 그래서 우리는 매 번 새로운 설정으로 번들을 패키징합니다. 변경 사항이 없더라도 모듈을 다시 빌드 할 때 모든 모듈이 다시 빌드되므로 Product Id = "*"를 사용하기 때문에 모든 모듈이 다른 제품 코드를 가질 것입니다. 다른 방법으로는 밥? – randomuser15995183

+0

'Product/@ Id = "*"'를 사용하지 않거나 패키지를 다시 빌드하지 마십시오. –

관련 문제