다음과 같은 문제점이 있으며 어떤 일이 벌어지고 있는지 이해하려고합니다. 이 코드를 가지고 :다른 형식으로 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를 사용하고 있으므로이 코드에 을 붙여야합니다.