网页下载 vcruntime140 with wix burn
Web download of vcruntime140 with wix burn
如果需要,我想使用 WiX 引导程序 burn
自动下载并安装 vcruntime140 包(Visual C++ Redistributable for Visual Studio 2015)。
对于 .NET 框架,这样做非常容易:
<Chain>
<PackageGroupRef Id="NetFx452Web"/>
...
</Chain>
但我找不到 vcruntime 包的等效项。 (是因为没有,还是我在 Google 中输入了错误的关键字?)
明确一点:我不想在我的安装程序中包含该软件包。必须是网页下载。
对于 .net,redist 没有 PackageGroupRef。
但还有 3 个其他选项:
在您的链中添加一个 redist exe。 (对你不好)
在你的一个 msi 中使用 redist c++ merge module。
尝试像 .net 一样编写您自己的 web download。这是 .net Web 下载的示例。完整文件可以在 wix 的源代码中找到,名称为“NetFx46.wxs”
<Fragment>
<PropertyRef Id="WIXNETFX4RELEASEINSTALLED" />
<Property Id="WIX_IS_NETFRAMEWORK_46_OR_LATER_INSTALLED" Secure="yes" />
<SetProperty Id="WIX_IS_NETFRAMEWORK_46_OR_LATER_INSTALLED" Value="1" After="AppSearch">
WIXNETFX4RELEASEINSTALLED >= "#$(var.NetFx46MinRelease)"
</SetProperty>
</Fragment>
<Fragment>
<util:RegistrySearchRef Id="NETFRAMEWORK45"/>
<WixVariable Id="WixMbaPrereqPackageId" Value="NetFx46Web" />
<WixVariable Id="WixMbaPrereqLicenseUrl" Value="http://go.microsoft.com/fwlink/?LinkID=558772" />
<WixVariable Id="NetFx46WebDetectCondition" Value="NETFRAMEWORK45 >= $(var.NetFx46MinRelease)" Overridable="yes" />
<WixVariable Id="NetFx46WebInstallCondition" Value="" Overridable="yes" />
<WixVariable Id="NetFx46WebPackageDirectory" Value="redist\" Overridable="yes" />
<PackageGroup Id="NetFx46Web">
<ExePackage
InstallCommand="/q /norestart /ChainingPackage "[WixBundleName]" /log "[NetFx46FullLog].html""
RepairCommand="/q /norestart /repair /ChainingPackage "[WixBundleName]" /log "[NetFx46FullLog].html""
UninstallCommand="/uninstall /q /norestart /ChainingPackage "[WixBundleName]" /log "[NetFx46FullLog].html""
PerMachine="yes"
DetectCondition="!(wix.NetFx46WebDetectCondition)"
InstallCondition="!(wix.NetFx46WebInstallCondition)"
Id="NetFx46Web"
Vital="yes"
Permanent="yes"
Protocol="netfx4"
DownloadUrl="http://go.microsoft.com/fwlink/?LinkId=560371"
LogPathVariable="NetFx46FullLog"
Compressed="no"
Name="!(wix.NetFx46WebPackageDirectory)NDP46-KB3045557-x86-x64-AllOS-ENU.exe">
<RemotePayload
CertificatePublicKey="52868DFCA6E3AF2632389E6C1EE7D0468D3797D0"
CertificateThumbprint="3BDA323E552DB1FDE5F4FBEE75D6D5B2B187EEDC"
Description="Microsoft .NET Framework 4.6 Setup"
Hash="480CA134B9E3F2437DF10719D5A8C77DDEC0A4F1"
ProductName="Microsoft .NET Framework 4.6"
Size="1497400"
Version="4.6.81.0" />
</ExePackage>
</PackageGroup>
仅作记录,这是我的最终解决方案。
右键单击 Visual Studio 中的引导程序项目 References 并添加对 WixUtilExtension 的引用。
将 xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"
作为属性添加到顶级 Wix
元素。
添加到 <Chain>
元素:
<PackageGroupRef Id="vcredist_vc140"/>
添加为 <Wix>
元素的子元素:
<Fragment>
<!-- vcredist 2015 x86 -->
<util:ProductSearch
Id="VCREDIST_140_x86"
UpgradeCode="65E5BD06-6392-3027-8C26-853107D3CF1A"
Result="version"
Variable="VCREDIST_140_x86"/>
<PackageGroup Id="vcredist_vc140">
<ExePackage
Id="vc140"
Cache="yes"
PerMachine="yes"
Permanent="yes"
Vital="yes"
Compressed="no"
DownloadUrl="http://go.microsoft.com/fwlink/?LinkID=615459"
Name="vcredist_vc140"
InstallCommand="/quiet /norestart"
DetectCondition="(VCREIST_140_x86 >= v14.0.24215)">
<RemotePayload
Description="Microsoft Visual C++ 2015 Redistributable (x86) - 14.0.24215"
ProductName="Microsoft Visual C++ 2015 Redistributable (x86) - 14.0.24215"
Size="14456872"
Version="14.0.24215.1"
Hash="72211BD2E7DFC91EA7C8FAC549C49C0543BA791B" />
</ExePackage>
</PackageGroup>
</Fragment>
UpgradeCode
来自 并且特定于 vcredist 安装程序的 v14.0.24215。这就是引导程序决定它是否已经安装的方式。
Compressed="no"
告诉安装程序不要在安装程序本身中包含该文件(因为我们想从 Web 下载它)。
DownloadUrl
是从 .
直接 URL 到可下载安装程序
RemotePayload Description
是安装程序描述资源的文本,同样 ProductName
。 (看起来文本 not 必须与资源中的文本匹配。ProductName
是引导程序进度对话框中显示的描述。)
Size
是以字节为单位的大小。
Hash
是通过 Powershell 命令 get-filehash -algorithm SHA1 .\vc_redist.x86.exe
.
找到的
我希望这对某人有所帮助。
如果需要,我想使用 WiX 引导程序 burn
自动下载并安装 vcruntime140 包(Visual C++ Redistributable for Visual Studio 2015)。
对于 .NET 框架,这样做非常容易:
<Chain>
<PackageGroupRef Id="NetFx452Web"/>
...
</Chain>
但我找不到 vcruntime 包的等效项。 (是因为没有,还是我在 Google 中输入了错误的关键字?)
明确一点:我不想在我的安装程序中包含该软件包。必须是网页下载。
对于 .net,redist 没有 PackageGroupRef。
但还有 3 个其他选项:
在您的链中添加一个 redist exe。 (对你不好)
在你的一个 msi 中使用 redist c++ merge module。
尝试像 .net 一样编写您自己的 web download。这是 .net Web 下载的示例。完整文件可以在 wix 的源代码中找到,名称为“NetFx46.wxs”
<Fragment>
<PropertyRef Id="WIXNETFX4RELEASEINSTALLED" />
<Property Id="WIX_IS_NETFRAMEWORK_46_OR_LATER_INSTALLED" Secure="yes" />
<SetProperty Id="WIX_IS_NETFRAMEWORK_46_OR_LATER_INSTALLED" Value="1" After="AppSearch">
WIXNETFX4RELEASEINSTALLED >= "#$(var.NetFx46MinRelease)"
</SetProperty>
</Fragment>
<Fragment>
<util:RegistrySearchRef Id="NETFRAMEWORK45"/>
<WixVariable Id="WixMbaPrereqPackageId" Value="NetFx46Web" />
<WixVariable Id="WixMbaPrereqLicenseUrl" Value="http://go.microsoft.com/fwlink/?LinkID=558772" />
<WixVariable Id="NetFx46WebDetectCondition" Value="NETFRAMEWORK45 >= $(var.NetFx46MinRelease)" Overridable="yes" />
<WixVariable Id="NetFx46WebInstallCondition" Value="" Overridable="yes" />
<WixVariable Id="NetFx46WebPackageDirectory" Value="redist\" Overridable="yes" />
<PackageGroup Id="NetFx46Web">
<ExePackage
InstallCommand="/q /norestart /ChainingPackage "[WixBundleName]" /log "[NetFx46FullLog].html""
RepairCommand="/q /norestart /repair /ChainingPackage "[WixBundleName]" /log "[NetFx46FullLog].html""
UninstallCommand="/uninstall /q /norestart /ChainingPackage "[WixBundleName]" /log "[NetFx46FullLog].html""
PerMachine="yes"
DetectCondition="!(wix.NetFx46WebDetectCondition)"
InstallCondition="!(wix.NetFx46WebInstallCondition)"
Id="NetFx46Web"
Vital="yes"
Permanent="yes"
Protocol="netfx4"
DownloadUrl="http://go.microsoft.com/fwlink/?LinkId=560371"
LogPathVariable="NetFx46FullLog"
Compressed="no"
Name="!(wix.NetFx46WebPackageDirectory)NDP46-KB3045557-x86-x64-AllOS-ENU.exe">
<RemotePayload
CertificatePublicKey="52868DFCA6E3AF2632389E6C1EE7D0468D3797D0"
CertificateThumbprint="3BDA323E552DB1FDE5F4FBEE75D6D5B2B187EEDC"
Description="Microsoft .NET Framework 4.6 Setup"
Hash="480CA134B9E3F2437DF10719D5A8C77DDEC0A4F1"
ProductName="Microsoft .NET Framework 4.6"
Size="1497400"
Version="4.6.81.0" />
</ExePackage>
</PackageGroup>
仅作记录,这是我的最终解决方案。
右键单击 Visual Studio 中的引导程序项目 References 并添加对 WixUtilExtension 的引用。
将 xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"
作为属性添加到顶级 Wix
元素。
添加到 <Chain>
元素:
<PackageGroupRef Id="vcredist_vc140"/>
添加为 <Wix>
元素的子元素:
<Fragment>
<!-- vcredist 2015 x86 -->
<util:ProductSearch
Id="VCREDIST_140_x86"
UpgradeCode="65E5BD06-6392-3027-8C26-853107D3CF1A"
Result="version"
Variable="VCREDIST_140_x86"/>
<PackageGroup Id="vcredist_vc140">
<ExePackage
Id="vc140"
Cache="yes"
PerMachine="yes"
Permanent="yes"
Vital="yes"
Compressed="no"
DownloadUrl="http://go.microsoft.com/fwlink/?LinkID=615459"
Name="vcredist_vc140"
InstallCommand="/quiet /norestart"
DetectCondition="(VCREIST_140_x86 >= v14.0.24215)">
<RemotePayload
Description="Microsoft Visual C++ 2015 Redistributable (x86) - 14.0.24215"
ProductName="Microsoft Visual C++ 2015 Redistributable (x86) - 14.0.24215"
Size="14456872"
Version="14.0.24215.1"
Hash="72211BD2E7DFC91EA7C8FAC549C49C0543BA791B" />
</ExePackage>
</PackageGroup>
</Fragment>
UpgradeCode
来自
Compressed="no"
告诉安装程序不要在安装程序本身中包含该文件(因为我们想从 Web 下载它)。
DownloadUrl
是从
RemotePayload Description
是安装程序描述资源的文本,同样 ProductName
。 (看起来文本 not 必须与资源中的文本匹配。ProductName
是引导程序进度对话框中显示的描述。)
Size
是以字节为单位的大小。
Hash
是通过 Powershell 命令 get-filehash -algorithm SHA1 .\vc_redist.x86.exe
.
我希望这对某人有所帮助。