kay*_*eck 7 registry windows-installer wix msiexec windows-10
用于MSI的WiX工具集未使用其预期数据更新注册表键值.如果缺少k:v,则添加它.如果k:v的数据设置为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>
Run Code Online (Sandbox Code Playgroud)
此外,它似乎是从退出代码MSIEXEC总是返回0代替3010的1641检查时$LastExitCode和%errorlevel%.我没有搞乱不同的重启行为,但我认为重启提示会导致我的安装程序退出非零,所以任何指导也有所值.
因此,该示例可以工作,但您无法通过重新运行安装来重复测试它。你必须先卸载它,或者像我一样偶然发现原因,并在重新运行之前重新编译。
我注意到该示例仅在重新编译后才能正常工作。因此,我猜测安装程序在编译时有一个 GUID 或与之相关的其他内容,然后将其包含在您的安装中。当重新运行安装时,它只会快速运行并关闭,不会要求您先卸载或删除现有产品,所以我假设它只是没有评估我的安装程序必须编写密钥,而只是当不需要做更多事情时就结束了。
所以基本上这是一个测试错误/缺乏内在的 WiX 知识。
因此,请务必在重新运行 MSI 之前将其卸载,除非您专门尝试触发升级行为。
我不确定为什么我没有收到有关已存在产品的错误。我本以为这肯定是默认行为。
| 归档时间: |
|
| 查看次数: |
672 次 |
| 最近记录: |