gpt4 book ai didi

wix - 使用 WiX 工具集时,当值设置为 0 时,注册表项不会更新

转载 作者:行者123 更新时间:2023-12-03 02:33:28 26 4
gpt4 key购买 nike

WiX 工具集未使用 MSI 的预期数据更新注册表项值。如果 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>

此外,MSIEXEC 的退出代码似乎始终返回 0,而不是 16413010检查 $LastExitCode%errorlevel% 时。我没有搞乱不同的重新启动行为,但我认为重新启动提示会导致我的安装程序以非零值退出,因此也非常感谢那里的任何指导。

最佳答案

安装并创建详细日志:

msiexec/I [msi 路径]/l*vx [文本日志文件路径]

并查看属性值等。您没有获得 3010 退出结果的最可能原因是 ScheduleReboot 条件为 false。

假设一切都按预期工作,问题可能是您需要在属性声明中将 Secure 设置为 Yes,否则该值将不会从 UI 序列注册表搜索传输到执行序列。如果日志显示它在安装开始时获得了正确的值,但后来丢失了,这很可能是问题所在。

您的评论之一提到了%errorlevel%,但不清楚为什么这是相关的。如果您从批处理文件或类似文件启动此操作,那么这是需要添加的有用信息。另外,如果您以某种与当前交互式用户分开的方式安装它,那么了解这一点也很有用。

日志似乎表明一切正常。这些属性的值看起来正确,并且执行 ScheduleReboot 操作。我看到的唯一问题是 Windows Installer 没有显示要求用户重新启动的对话框,因此它执行非交互式操作,即返回 3010 以告诉调用者需要重新启动。 Windows Installer 没有提示重新启动(这就是 ScheduleReboot 所做的)没有明显的原因,但如果安装在非交互式用户上下文中运行,则 Windows 将不会向其他用户显示桌面对话框(或者不向任何用户显示桌面对话框)。用户无人登录)。

关于wix - 使用 WiX 工具集时,当值设置为 0 时,注册表项不会更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46499556/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com