MSI 용 WiX Toolset에서 레지스트리 키 값을 원하는 데이터로 업데이트하지 않습니다. k : v가 누락되면 추가됩니다. k : v의 데이터가 0으로 설정되면 완전히 무시됩니다. 실제 문제는 여기에 있습니다. (생각합니다)WiX Toolset을 사용할 때 값이 0으로 설정되면 레지스트리 키가 업데이트되지 않음
기본 목표는이 레지스트리 키 값이 설치 전에 의도 한 데이터 값과 일치하는지 확인하는 것입니다. 키를 추가/업데이트해야하는 경우 다시 부팅하라는 메시지가 나타납니다.
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
<Product Id="*" Name="SampleInstaller" Language="1033" Version="1.0.0.0" Manufacturer="ACME" UpgradeCode="cf6248e9-d7da-4996-9b8e-90072e8510f6">
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" Platform="x64"/>
<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
<Feature Id="ProductFeature" Title="SampleInstaller" Level="1">
<ComponentGroupRef Id="ProductComponents" />
</Feature>
</Product>
<Fragment>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder64">
<Directory Id="INSTALLFOLDER" Name="SampleInstaller" />
</Directory>
</Directory>
<Property Id="VKB_QUERY_HKCU" Secure="yes">
<RegistrySearch Id="VkbVisibleHkcu"
Win64="yes"
Type="raw"
Root="HKCU"
Key="Software\Microsoft\TabletTip\1.7"
Name="TipbandDesiredVisibility"/>
</Property>
<ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
<Component Id="ShowVKB_Registry_HKCU" Guid="{97AB4B1D-C9C8-4B34-9328-FF8CA3ED8992}" Directory="INSTALLFOLDER">
<RegistryKey Id="VKB_Registry_Key_HKCU" Root="HKCU" Key="Software\Microsoft\TabletTip\1.7" ForceCreateOnInstall="yes" ForceDeleteOnUninstall="no">
<RegistryValue Id="VKB_Registry_Value_HKCU" Action="write" Type="integer" Name="TipbandDesiredVisibility" Value="1"/>
</RegistryKey>
</Component>
</ComponentGroup>
<InstallExecuteSequence>
<ScheduleReboot After="InstallFinalize">NOT (VKB_QUERY_HKCU = "#1")</ScheduleReboot>
</InstallExecuteSequence>
</Fragment>
</Wix>
또한, $LastExitCode
및 %errorlevel%
을 검사 할 때 항상 0
대신 1641
의 3010
을 반환 MSIEXEC
에서 종료 코드처럼 보인다. 나는 다른 재부팅 동작을 망쳐 놓지는 않았지만, 재부팅 프롬프트를 사용하면 설치 프로그램이 0이 아닌 상태로 빠져 나가게 될 것이라고 생각했기 때문에 모든 지침도 환영합니다. 설치와 자세한 로그를 생성
다시 컴파일 할 때 버전을 변경하지 않고 업그레이드를 테스트 할 수있게하려면''에 AllowSameVersionUpgrades = "yes"를 지정해야합니다. 이를 사용하지 않고 업그레이드를 테스트하려면 Windows Installer가 버전 비교에서 네 번째 부분을 무시하기 때문에 모든 새로운 빌드가 버전의 처음 세 부분 중 하나를 변경하면서 버전을 업그레이드해야합니다. –
** 모든 제품 ** 빌드 **에서 새로운 제품 ID GUID를 얻고 다른 빌드와 본질적으로 다르다는 것을 지정하는' "를 사용 했으므로 제품이 이미 존재하지 않았습니다 정확하게 동일한 출처와도. 나는 당신이 설치를 개발할 때 실수로 물건을 엉망으로 만들 수 있기 때문에 쉽게 알려진 '깨끗한'상태로 롤백 할 수있는 VM에서 설치 테스트를하는 것이 좋습니다. –
좋은 소리, @ BrianSutherland! VM에서 테스트하는 방법을 확실히 볼 것입니다. 제품 ID가 Visual Studio 확장명으로 압축 된 설치 템플릿으로 이러한 유형의 동작을 기본값으로 설정한다는 것이 이상하게 보입니다. 미리 생성 된 GUID보다 이점이 고려되는 이유가 있습니까? –