WiX Bundle 不在程序和功能中显示 MSI
WiX Bundle not displaying MSIs in Programs and Features
我的捆绑包安装中出现了新的奇怪行为:MSI——曾经出现在程序和功能中——已经停止出现在程序和功能中(以下简称 P&F)。
我 喜欢 发生的行为是让我作为 MSI 安装的程序出现在 P&F 中,让用户有机会单独卸载它们。
我有什么tried/noticed:
- 如果我安装 MSI 而不捆绑它们:
- 它们出现在 P&F 中,并且可以卸载
此外,我可以通过将 ARPSYSTEMCOMPONENT 属性 设置为 1(默认值为 0,意思是“确实出现在 P*F 中”)来控制它们是否出现在 P&F 中,即:
<Property Id="ARPSYSTEMCOMPONENT" Value="1"/>
这些更改反映在注册表中。在检查键 HKLM/SOFTWARE/Microsoft/Windows/CurrentVersion/Uninstall/{GUID} 时,如果我将 属性 设置为 1,它就会显示(它不显示当我将它设置为 0 时,但我认为这是因为默认值不显示)。
但是,当我将 MSI 放入捆绑包时,bingo-bango-bongo 它们从 P&F 中消失了!而且,如果我检查注册表,每个 MSI 的 SystemComponent 属性 都设置为 1。
我得出的结论是,在我的引导程序中,我的 MSI 的 SystemComponent 属性被设置为 1。但是这些属性可以在哪里设置?不用说,我从来没有在我的 WiX XML 中设置它们(至少,我认为我没有这样做)。我没有任何特殊的 UI 用于引导程序(只是一个许可证),并且 MSI 本身安静地安装,没有 UI.
我卡住了!任何人都可以阐明这一点吗?
我使用的是 Visual Studio 2015,WiX 3.10 版。这是我的全部 Bootstrapper 代码:
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:bal="http://schemas.microsoft.com/wix/BalExtension"
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"
xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension">
<Bundle Name="****"
Version="1.0.5.0"
Manufacturer="****"
UpgradeCode="7be91f26-93f8-400c-9eac-e69383454e03"
IconSourceFile="src\****.ico" DisableModify="yes" DisableRemove="yes"
AboutUrl="****.com"
Copyright="Copyright 2017, ****">
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense">
<bal:WixStandardBootstrapperApplication LicenseFile="src\****_License.rtf"
SuppressOptionsUI="yes"/>
</BootstrapperApplicationRef>
<!-- The two registry serarches provide a variable, what version of .NET is installed on the target machine. One search
is for x86, the other for x64. -->
<util:RegistrySearch Root="HKLM"
Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full"
Value="Version"
Variable="Net452FullVersion"/>
<util:RegistrySearch Root="HKLM"
Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full"
Value="Version"
Variable="Net452x64FullVersion"
Win64="yes"/>
<Chain>
<ExePackage
Id="Microsoft_dot_Net_4.5.2"
Name="Microsoft 4.5.2 Setup"
Cache="no"
Compressed="yes"
PerMachine="yes"
Permanent="yes"
SourceFile="executables\NDP452-KB2901907-x86-x64-AllOS-ENU.exe"
InstallCommand="/q"
DetectCondition="(Net452FullVersion = "4.5.51209") AND (NOT VersionNT64 OR (Net4x64FullVersion = "4.5.51209"))"
InstallCondition="(VersionNT >= v6.0 OR VersionNT64 >= v6.0) AND (NOT (Net452FullVersion = "4.5.51209" OR Net452x64FullVersion = "4.5.51209"))"/>
<ExePackage Id="Microsoft_Visual_C_plus_plus_Redistributable_2015"
InstallCommand="/q"
SourceFile="executables\vc_redist.x86.exe"/>
<RollbackBoundary/>
<MsiPackage SourceFile="$(var.****.TargetPath)"/>
<MsiPackage SourceFile="$(var.****.TargetPath)"/>
<ExePackage SourceFile="executables\****.exe" InstallCommand="/S"/>
<ExePackage SourceFile="executables\****.exe"/>
</Chain>
</Bundle>
</Wix>
MsiPackage/@Visible
属性控制是否在 ARP 中显示 MSI 包。
我的捆绑包安装中出现了新的奇怪行为:MSI——曾经出现在程序和功能中——已经停止出现在程序和功能中(以下简称 P&F)。
我 喜欢 发生的行为是让我作为 MSI 安装的程序出现在 P&F 中,让用户有机会单独卸载它们。
我有什么tried/noticed:
- 如果我安装 MSI 而不捆绑它们:
- 它们出现在 P&F 中,并且可以卸载
此外,我可以通过将 ARPSYSTEMCOMPONENT 属性 设置为 1(默认值为 0,意思是“确实出现在 P*F 中”)来控制它们是否出现在 P&F 中,即:
<Property Id="ARPSYSTEMCOMPONENT" Value="1"/>
这些更改反映在注册表中。在检查键 HKLM/SOFTWARE/Microsoft/Windows/CurrentVersion/Uninstall/{GUID} 时,如果我将 属性 设置为 1,它就会显示(它不显示当我将它设置为 0 时,但我认为这是因为默认值不显示)。
但是,当我将 MSI 放入捆绑包时,bingo-bango-bongo 它们从 P&F 中消失了!而且,如果我检查注册表,每个 MSI 的 SystemComponent 属性 都设置为 1。
我得出的结论是,在我的引导程序中,我的 MSI 的 SystemComponent 属性被设置为 1。但是这些属性可以在哪里设置?不用说,我从来没有在我的 WiX XML 中设置它们(至少,我认为我没有这样做)。我没有任何特殊的 UI 用于引导程序(只是一个许可证),并且 MSI 本身安静地安装,没有 UI.
我卡住了!任何人都可以阐明这一点吗?
我使用的是 Visual Studio 2015,WiX 3.10 版。这是我的全部 Bootstrapper 代码:
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:bal="http://schemas.microsoft.com/wix/BalExtension"
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"
xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension">
<Bundle Name="****"
Version="1.0.5.0"
Manufacturer="****"
UpgradeCode="7be91f26-93f8-400c-9eac-e69383454e03"
IconSourceFile="src\****.ico" DisableModify="yes" DisableRemove="yes"
AboutUrl="****.com"
Copyright="Copyright 2017, ****">
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense">
<bal:WixStandardBootstrapperApplication LicenseFile="src\****_License.rtf"
SuppressOptionsUI="yes"/>
</BootstrapperApplicationRef>
<!-- The two registry serarches provide a variable, what version of .NET is installed on the target machine. One search
is for x86, the other for x64. -->
<util:RegistrySearch Root="HKLM"
Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full"
Value="Version"
Variable="Net452FullVersion"/>
<util:RegistrySearch Root="HKLM"
Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full"
Value="Version"
Variable="Net452x64FullVersion"
Win64="yes"/>
<Chain>
<ExePackage
Id="Microsoft_dot_Net_4.5.2"
Name="Microsoft 4.5.2 Setup"
Cache="no"
Compressed="yes"
PerMachine="yes"
Permanent="yes"
SourceFile="executables\NDP452-KB2901907-x86-x64-AllOS-ENU.exe"
InstallCommand="/q"
DetectCondition="(Net452FullVersion = "4.5.51209") AND (NOT VersionNT64 OR (Net4x64FullVersion = "4.5.51209"))"
InstallCondition="(VersionNT >= v6.0 OR VersionNT64 >= v6.0) AND (NOT (Net452FullVersion = "4.5.51209" OR Net452x64FullVersion = "4.5.51209"))"/>
<ExePackage Id="Microsoft_Visual_C_plus_plus_Redistributable_2015"
InstallCommand="/q"
SourceFile="executables\vc_redist.x86.exe"/>
<RollbackBoundary/>
<MsiPackage SourceFile="$(var.****.TargetPath)"/>
<MsiPackage SourceFile="$(var.****.TargetPath)"/>
<ExePackage SourceFile="executables\****.exe" InstallCommand="/S"/>
<ExePackage SourceFile="executables\****.exe"/>
</Chain>
</Bundle>
</Wix>
MsiPackage/@Visible
属性控制是否在 ARP 中显示 MSI 包。