WIX 安装程序 (.MSI) 由于 WebView2 运行时安装程序注册表检查而失败

问题描述 投票:0回答:3

我们使用 Package bootstrapper 作为二进制流 在应用程序安装期间使用来进行 WebView2 运行时安装程序注册表检查。 但我们的安装程序失败并出现以下错误,并且安装没有发生。

我们尝试安装的机器已经安装了 webview2 运行时

图1: 图2:

我们在product.wxs 文件中执行以下步骤。

第1步:

<Property Id="WVRTINSTALLED">
  <RegistrySearch Id="WVRTInstalled1" Root="HKLM" Key="SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate\Clients{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}" Name="pv" Type="raw" />
  <RegistrySearch Id="WVRTInstalled2" Root="HKLM" Key="SOFTWARE\Microsoft\EdgeUpdate\Clients{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}" Name="pv" Type="raw" />
  <RegistrySearch Id="WVRTInstalled3" Root="HKCU" Key="SOFTWARE\Microsoft\EdgeUpdate\Clients{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}" Name="pv" Type="raw" />
</Property>
<Binary Id="MicrosoftEdgeWebview2Setup.exe" SourceFile="C:\Users\source\setup dependency\MicrosoftEdgeWebview2Setup.exe"/>
<CustomAction Id='InvokeBootstrapper' BinaryKey='MicrosoftEdgeWebview2Setup.exe' Execute="deferred" ExeCommand=' /install' Return='check' />

第2步:

<Custom Action="CloseAppsPrompt" After="CostFinalize"></Custom>
<Custom Action='InvokeBootstrapper' Before='InstallFinalize'>
<![CDATA[NOT(REMOVE OR WVRTINSTALLED)]]>
</Custom>

注意:我们已按照此示例中给出的步骤进行操作:https://github.com/MicrosoftEdge/WebView2Samples/blob/main/SampleApps/WV2DeploymentWiXCustomActionSample/Product.wxs

我正在尝试检查 webview2 的多个注册表,如果它在用户计算机的任何注册表中尚不可用,我希望进行安装,如果它已存在于用户计算机中,则跳过安装

wix webview2
3个回答
1
投票

这不是答案,但我不能简单地评论你的帖子,因为我没有足够的声誉点。但我想提出一些建议,以防它可以帮助您解决问题。

我正在我的安装程序之一中安装 Webview2,并检查与您的 WVRTInstalled2 引用相同的注册表项。我的建议是找到实际设置的那些(可能是 WVRTInstalled2,就像我的情况一样),并仅包含该RegistrySearch 来设置您的属性。如果正确设置了 WVRTIINSTALLED 属性,那么包含其他 2 个属性可能会创建“AND”条件而不是“OR”条件。

如果您始终无法解决 WVRTIINSTALLED 的设置问题,那么我建议将 Webview2 安装程序的执行更改为静默,以便快速处理所有问题,无需用户干预。

如果这没有您需要的那么有帮助,我们深表歉意。


1
投票

使用时应单独使用RegistrySearch:

<Property Id="WVRTINSTALLED_64">
  <RegistrySearch Id="WVRTInstalled64" Root="HKLM" Key="SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}" Name="pv" Type="raw" Win64="yes"/>
</Property>

<Property Id="WVRTINSTALLED_32">
  <RegistrySearch Id="WVRTInstalled32" Root="HKLM" Key="SOFTWARE\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}" Name="pv" Type="raw" Win64="no"/>
</Property>

<Property Id="WVRTINSTALLED_32_USER">
  <RegistrySearch Id="WVRTInstalled32User" Root="HKCU" Key="Software\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}" Name="pv" Type="raw" Win64="no"/>
</Property>

使用条件如下:

<![CDATA[NOT (REMOVE OR WVRTINSTALLED_64 OR WVRTINSTALLED_32 OR WVRTINSTALLED_32_USER)]]>

0
投票

除了其他建议之外,我注意到您只是在注册表项路径中省略了一个反斜杠。你写道:

<RegistrySearch Id="WVRTInstalled1" Root="HKLM" Key="SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate\Clients{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}" Name="pv" Type="raw" />

应该是:

<RegistrySearch Id="WVRTInstalled1" Root="HKLM" Key="SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}" Name="pv" Type="raw" />

等等

© www.soinside.com 2019 - 2024. All rights reserved.