문제

직장에서 우리가 사용하는 WiX 을 위해 건물 설치 패키지.우리가 원하는 제품의 설치 X 결과에서 제거의 이전 버전의는 제품에서는 기계입니다.

에 여러 장소에 대해 인터넷에서 주요 업그레이드 하지만 얻을 수 없었습니다.할 수 있는 사람을 주시기 바랍 정확하게 지정하는 단계에 필요 가 추가 이전 버전을 제거하는 기능을 WiX?

도움이 되었습니까?

해결책

에서 최신 버전(에서 3.5.1315.0 베타)사용할 수 있습니다 MajorUpgrade 요소 대신 사용하여 당신의 자신입니다.

예를 들어,우리가 사용하는 이렇게 하는 코드는 자동 업그레이드.을 방지하로 다운그레이드,을 주는 국제 오류 메시지는 것을 방지할 수 있 업그레이드는 기존과 동일 버전(예:만 낮은 버전의 업그레이드):

<MajorUpgrade
    AllowDowngrades="no" DowngradeErrorMessage="!(loc.NewerVersionInstalled)"
    AllowSameVersionUpgrades="no"
    />

다른 팁

마지막으로 저는 해결책을 발견-시 여기에 대한 다른 사람들 같은 문제가있을 수 있습니다(모든 5 개의):

  • 제품을 변경 ID*
  • 에서 제품 다음을 추가합니다:

    <Property Id="PREVIOUSVERSIONSINSTALLED" Secure="yes" />
    <Upgrade Id="YOUR_GUID">  
       <UpgradeVersion
          Minimum="1.0.0.0" Maximum="99.0.0.0"
          Property="PREVIOUSVERSIONSINSTALLED"
          IncludeMinimum="yes" IncludeMaximum="no" />
    </Upgrade> 
    
  • 아래에 InstallExecuteSequence add:

    <RemoveExistingProducts Before="InstallInitialize" /> 
    

지금할 때마다 제품을 설치 제거하고 설치 이전 버전입니다.

참고: 대체 업그레이드 Id 를 당신의 자신의 GUID

다음은 일종의 구문은 내가 사용하는을 위한 중요한 업그레이드

<Product Id="*" UpgradeCode="PUT-GUID-HERE" Version="$(var.ProductVersion)">
 <Upgrade Id="PUT-GUID-HERE">
    <UpgradeVersion OnlyDetect="yes" Minimum="$(var.ProductVersion)" Property="NEWERVERSIONDETECTED" IncludeMinimum="no" />
    <UpgradeVersion OnlyDetect="no" Maximum="$(var.ProductVersion)" Property="OLDERVERSIONBEINGUPGRADED" IncludeMaximum="no" />
</Upgrade>

<InstallExecuteSequence>
    <RemoveExistingProducts After="InstallInitialize" />
</InstallExecuteSequence>

로@브라이언 길이 주목하는 다른 장소가있을 예약하려면 RemoveExistingProducts 에 따라 원하는 최적화를 달성할 수 있습니다.참고 넣어-GUID-여기가 동일해야 합니다.

업그레이드 요소는 제품 내부의 요소를 결합을 적절하게 예약하의 작업을 수행합니다 제거입니다.지 확인하도록 업그레이드 코드의 당신이 원하는 모든 제품을 제거합니다.

<Property Id="PREVIOUSVERSIONSINSTALLED" Secure="yes" />
<Upgrade Id="00000000-0000-0000-0000-000000000000">
  <UpgradeVersion Minimum="1.0.0.0" Maximum="1.0.5.0" Property="PREVIOUSVERSIONSINSTALLED" IncludeMinimum="yes" IncludeMaximum="no" />
</Upgrade>

참고는,당신은 신중하와 함께 귀하의 빌드하는 것을 방지할 수 있습에서 사람들을 실수로 설치 이전 버전의 제품을 통해 새로운 하나입니다.는 무엇이 최대 필드입니다.때 우리를 구축 설치 관리자,우리는 설정 UpgradeVersion 최대 버전으로 건설되고있다,그러나 IncludeMaximum="no"이를 방지하기 위해 시나리오이다.

당신은 선택의 스케줄링에 관한 RemoveExistingProducts.내가 선호하는 예약 후 InstallFinalize(보다는 후 InstallInitialize 로 다른 권장):

<InstallExecuteSequence>
  <RemoveExistingProducts After="InstallFinalize"></RemoveExistingProducts>
</InstallExecuteSequence>

이는 제품의 이전 버전을 설치 후까지는 새로운 파일과 레지스트리 키가 복사됩니다.이렇게 마이그레이션에서 데이터 이전 버전의 새로(예를 들어,전환장의 사용자 환경 설정 레지스트리에서는 XML 파일에,하지만 당신이 원하는 예의 및 마이그레이션들을 설정).이 마이그레이션에서 수행이 지연된 사용자 지정 작업 전에 InstallFinalize.

또 다른 혜택은 효율성:이 있는 경우는 변경되지 않은 파일,Windows Installer 귀찮게 하지 않 복사하면 다시 예약 후 InstallFinalize.는 경우에 당신은 예약 후 InstallInitialize,이전 버전은 완전히 제거되는 첫 번째,그리고 새로운 버전이 설치되어 있습니다.이 결과에 불필요한 삭제 및 recopying 의 파일이 있습니다.

다른 일정 옵션 참조 RemoveExistingProducts 도움을 주제에 MSDN.이번 주 링크: http://msdn.microsoft.com/en-us/library/aa371197.aspx

당신이 나을 수 있습니다 묻는 이에 을 소개하고,-사용자 메일링 리스트.

을 소개하고,최상의 사용을 회사와 이해의 어떤 윈도우 설치 프로그램이다.을 받고 하는 것이 좋습니다"The Definitive Guide to Windows Installer".

작업 제거하는 기존 제품입니다 RemoveExistingProducts 작업.기 때문에 결과 그것이 무엇을 따라 어디에 그것의 예약 즉 여부,실패 원인은 이전에 제품을 다시 설치할지 여부와 변경되지 않은 파일을 복사시를 예약합니다.

RemoveExistingProducts 프로세스 <Upgrade> 소에서는 현재 설치과 일치하는 @Id 특성 UpgradeCode (에서 지정 <Product> 소)를 설치된 모든 제품에는 시스템입니다.이 UpgradeCode 패밀리를 정의의 관련 제품입니다.어떤 제품이 UpgradeCode,그의 버전을 가을 범위로 지정한,어디서 UpgradeVersion/@OnlyDetect 특성 no (또는 생략),제거됩니다.

에 대한 설명서 RemoveExistingProducts 언급 설정 UPGRADINGPRODUCTCODE 을 제공합니다.그것이 의미하는 제거 프로세스 제품에 대한 제거 을 받는 속성 값은 Product/@Id 에 대한 제품이 설치되고 있습니다.

하신 경우에는 설치는 포함하지 않았습니다 UpgradeCode, 에,당신은 할 수 없이 기능을 사용합니다.

내가 사용하는 이 사이트를 이해하는 데 도움이 되는 기본 사항에 대해 소개하고,업그레이드

http://wix.tramontana.co.hu/tutorial/upgrades-and-modularization

이후에 내가 만든 샘플을 설치 프로그램(설치된 테스트 파일),그들 업그레이드를 설치 프로그램(설치된 2 개의 샘플을 테스트 파일).이것은 당신에게 기본적인 방법에 대해 이해하는 메커니즘을 작동합니다.

과 마이크로에서 말했다 책에서 누르십시오,"안드로이드 윈도우 설치",그것은 당신을 도움이 될 것입니다 이해하지만,그렇지 않을 사용하여 작성 WiX.

다른 사이트는 매우 도움이 되었다는 이 하나:

http://www.wixwiki.com/index.php?title=Main_Page

내가 읽 WiX 문서화,예를 다운로드,하지만 나는 아직도 문제가 많이 있었으로 업그레이드.사소한 업그레이드 실행하지 않거의 이전 제품에도 불구하고의 가능성을 지정합니다.소리는 일에 대한 조사 및 발견 소개하고,3.5intoduced 한 업그레이드.여기에는 사용:

<MajorUpgrade Schedule="afterInstallInitialize"
        DowngradeErrorMessage="A later version of [ProductName] is already installed. Setup will now exit." 
        AllowDowngrades="no" />

주요 이유 의 문제는 설명서를 말을 사용하"다시 모든=REINSTALLMODE=입력"매개변수에 대한 작고 작은 업그레이드는,하지만 그것은 말하지 않는 이들 매개변수 자금성에 대한 주요 업그레이드 -그들은 단순히 작동하지 않습니다.그래서 당신이 사용할 수 없으로 그들을 주요 업그레이드.

는 것이 좋 살펴 가진 알렉스 Shevchuk 의습니다.그는"주"업그레이드를 통해 소개하고,좋은 손에 예 에서 MSI 을 WiX,8 부-중요한 업그레이드.

하나 중요한 것은 내가에서는(도서 http://www.tramontana.co.hu/wix/lesson4.php 도)결과에서"또 다른 버전의 이 제품은 이미 설치된"오류가 있습니다:

*작 업데이트 균 작은 변화하는 하나 또는 몇 개의 파일이 변경을 보증하지 않는 변경 제품전(요.minor.구조).당신 없는 제품을 변경할 GUID 습니다.참고 당신은 항상 패키지 GUID 를 변경하려면 새로 만드는 경우.msi 파일은 이전과는 다른 사람에서는 어떤 존중합니다.설치 프로그램의 설치 프로그램 및 그들을 찾을 때 사용자가 원하는 변경하거나 설치 제거하고 사용하여 이러한 Guid.를 사용하여 동일한 GUID 를 위한 다른 패키지를 혼란스럽게 설치 프로그램입니다.

사소한 업그레이드 나타내는 변화는 제품의 버전은 이미 이 변경됩니다.수정 버전 특성의 제품은 태그가 있습니다.제품 동일하게 유지됩니다,그래서 당신은 필요가 없는 제품을 변경 GUID 지만,물론,새로운 패키지입니다.

주요 업그레이드 을 나타내는 중요한 변경과 같은 것 하나에서 전체 버전을 다른 버전.모든 것을 변경:버전 특성,제품 및 포장 Guid.

나의 최신 버전을 사용하여 WiX(3.0)과를 얻을 수 없었 위의 작업이다.하지만 이 작업:

<Product Id="*" UpgradeCode="PUT-GUID-HERE" ... >

<Upgrade Id="PUT-GUID-HERE">
  <UpgradeVersion OnlyDetect="no" Property="PREVIOUSFOUND"
     Minimum="1.0.0.0"  IncludeMinimum="yes"
     Maximum="99.0.0.0" IncludeMaximum="no" />
</Upgrade>

Note 넣어-GUID-기와 동일해야 합 GUID 를 정의에서 UpgradeCode 의 속성 제품입니다.

아래 나를 위해 일했습니다.

<Product Id="*" Name="XXXInstaller" Language="1033" Version="1.0.0.0" 
    Manufacturer="XXXX" UpgradeCode="YOUR_GUID_HERE">
<Package InstallerVersion="xxx" Compressed="yes"/>
<Upgrade Id="YOUR_GUID_HERE">
    <UpgradeVersion Property="REMOVINGTHEOLDVERSION" Minimum="1.0.0.0" 
        RemoveFeatures="ALL" />
</Upgrade>
<InstallExecuteSequence>
    <RemoveExistingProducts After="InstallInitialize" />
</InstallExecuteSequence>

는지 확인하십시오 UpgradeCode 에서 제품이 일치하 Id 서 업그레이드합니다.

이것은 나를 위해 일했으로도 중요한 등급:

<Wix ...>
  <Product ...>
    <Property Id="REINSTALLMODE" Value="amus" />
    <MajorUpgrade AllowDowngrades="yes" />
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top