2016-08-11 1 views
0

다음과 같은 문제점이 있으며 어떤 일이 벌어지고 있는지 이해하려고합니다. 이 코드를 가지고 :다른 형식으로 ProductVersion을 변경하면 msi 업그레이드가 실패합니다.

... 
<Product Name="My Service" 
     Id="*" 
     UpgradeCode="$(var.UpgradeCode)" 
     Language="$(var.Language)" 
     Codepage="$(var.CodePage)" 
     Version="$(var.ProductVersion)" 
     Manufacturer="$(var.Manufacturer)"> 

    <Package Id="*" 
     Keywords="Installer" 
     Description="My Service Installer" 
     Comments="Service Installer" 
     Manufacturer="$(var.Manufacturer)" 
     InstallerVersion="300" 
     Languages="$(var.Language)" 
     Compressed="yes" 
     SummaryCodepage="$(var.CodePage)" /> 

    <Upgrade Id="$(var.UpgradeCode)"> 

    <!-- Populate NEWERVERSIONDETECTED if there is an installed 
     package with the same upgrade code 
     and version is > the version being installed --> 
     <UpgradeVersion Minimum="$(var.ProductVersion)" 
        IncludeMinimum="no" 
        OnlyDetect="no" 
        Property="NEWERVERSIONDETECTED" /> 

    <!-- Populate UPGRADEFOUND if there is an installed 
     package with the same upgrade code 
     and the version is between the earliest version defined 
     and the version being installed --> 
     <UpgradeVersion Minimum="$(var.FirstVersion)" 
        IncludeMinimum="yes" 
        Maximum="$(var.ProductVersion)" 
        IncludeMaximum="no" 
        Property="PREVIOUSVERSIONSINSTALLED" /> 
    </Upgrade> 

    <Condition Message="A newer version is already installed.">NOT NEWERVERSIONDETECTED</Condition> 

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

<!-- Step 1: Define the directory structure --> 
... 
<!-- Step 2: Add files to your installer package --> 
... 
<!-- Step 3: Tell WiX to install the files --> 
... 

ProductVersion 및 FirstVersion에는 x.x.x 형식이 있습니다. msi에는 3 개의 파일 만 포함되어 있으므로 모든 것을 제거하고 새로운 파일을 설치하는 것이 좋습니다 (예 : 주요 업그레이드). 다음은 이러한 현상입니다. FirstVersion은 "0.0.1"로 정의됩니다. 두 번째 빌드 (첫 번째 빌드에서는 ProductVersion이 "0.0.2"이고 두 번째 빌드에서는 "0.0.3") 두 개의 msi를 생성합니다. 0.0.2 위에 0.0.3을 설치할 때 모든 것이 원활하게 진행됩니다. 프로그램 추가/제거에서 새 버전이 설치되어있는 것을보고, "내 서비스"가 로컬 서비스에서 실행중인 &입니다. 프로그램 파일에서 새 파일이 들어있는 폴더가 나타납니다.

2.0.2 위에 2.0.3을 설치할 때 ProductVersion 2.0.2 및 2.0.3 (이전 단계와 동일한 단계)으로 프로젝트를 빌드하면 오류 팝업이 나타나지 않고 설치가 완료됩니다 성공적으로 (적어도 이벤트 뷰어에서는 그렇게 말합니다.) Program Files의 내 폴더가 존재하지 않습니다. 로컬 서비스에서 내 서비스를 알 수 없습니다 (시작되지 않음). 유일한 좋은 점은 새로운 버전 2.0.3이 설치되었음을 보여주는 프로그램 추가/제거에 있습니다. 또 다른 이상한 점은 프로그램 추가/제거에서 내 응용 프로그램을 성공적으로 제거 할 수 있다는 것입니다. 오류 없음!

그래서 ProductVersion 업그레이드가 정상적으로 작동하지만 0.0.x 형식은 2.0.x가 아닌 이유는 무엇입니까?

업그레이드하는 동안 msiexec의 출력을 기록하려고했지만 너무 복잡합니다 ( ).

추신 : 다른 방법으로 업그레이드를 구현하지 않는 것이 좋습니다. 제한이 많이있는 msitools를 사용하고 있으므로이 코드에 을 붙여야합니다.

답변

0

버전이 맞습니다. 실수하지 않았습니다.

verbose log이 없으면 문제를 발견 할 가능성이 매우 낮습니다. 전혀 어렵지 않습니다. 위의 링크를 따라 가면 여러 가지 방법으로 로그를 생성하고이를 공유하거나 to read it 자신을 시도 할 수 있습니다.

관련 문제