我目前想为VS2017项目创建安装程序,该项目的先决条件是vcredist_x64。
为了创建安装程序,我安装了以下内容: - ClickOnce发布(通过VS2017安装程序) - Microsoft Visual Studio 2017 Installer Projects(由Microsoft提供的VS2017插件)
现在我创建了一个设置项目,在属性中 => 先决条件,我选择了Visual C++“14” Runtime Libraries(x64)
和从组件供应商的网站下载先决条件
。
如果我现在启动创建的setup.exe,则在目标计算机上安装先决条件时会出现错误:找不到以下软件包:
(没有列出任何软件包)。
日志文件:
已设置以下属性: 属性:[AdminUser] = true {boolean} 属性:[InstallMode] = HomeSite {string} 属性:[NTProductType] = 1 {int} 属性:[ProcessorArchitecture] = AMD64 {string} 属性:[VersionNT] = 10.0.0 {version} 正在构建列表阶段运行Visual C++“14”Runtime Libraries(x64)包检查 使用ProductCode'{C99E2ADC-0347-336E-A603-F1992B09D582}'运行MsiProductCheck MsiQueryProductState返回'-1' 为属性'VCRedistInstalled'设置值'-1 {int}' 已为“Visual C++“14” Runtime Libraries(x64)”包设置以下属性: 属性:[VCRedistInstalled] = -1 {int} 在命令'vc_redist.x64.exe'上运行检查 在属性'VCRedistInstalled'和值'3'上运行运算符'ValueGreaterThanEqualTo'的结果:false 在属性'AdminUser'和值'false'上运行运算符'ValueEqualTo'的结果:false 在属性'ProcessorArchitecture'和值'AMD64'上运行运算符'ValueNotEqualTo'的结果:false 在属性'VersionNT'和值'6.00'上运行运算符'VersionLessThan'的结果:false 命令'vc_redist.x64.exe'的检查结果为'安装' 'Visual C++“14”Runtime Libraries(x64)' RunCheck结果:需要安装 已接受安装组件'Visual C++“14”Runtime Libraries(x64)'。 将文件复制到临时目录“C:\ Users \ blubb_user \ AppData \ Local \ Temp \ VSD1A14.tmp \” 错误:找不到以下软件包文件:在VS 2015中,我也遇到过同样的问题。解决方法是修复bootstrapp文件中的PublicKey。但是我找不到正确的PublicKey。我试图使用匹配安装程序签名的PublicKey。在
C:\Program Files (x86)\Microsoft SDKs\ClickOnce Bootstrapper\Packages\vcredist_x64\product.xml
中提到了GUIDC99E2ADC-0347-336E-A603-F1992B09D582
,所以我在C:\ProgramData\Package Cache\
中查找具有此GUID的设置,并取出了这个PublicKey。
有什么办法可以让它适用于VS2017吗?
更新(解决方案):
我能够为我的情况(VS2017 Update 7)解决这个问题: 在packages.xml(C:\Program Files (x86)\Microsoft SDKs\ClickOnce Bootstrapper\Packages\vcredist_x64\en)中,VCRedistExe的路径无效。 应该是:
<String Name="VCRedistExe">https://aka.ms/vs/15/release/26405.00/VC_Redist.x64.exe</String>
我现在
<String Name="VCRedistExe">https://aka.ms/vs/15/release/26429.04/VC_Redist.x64.exe</String>
C:\Program Files (x86)\Microsoft SDKs\ClickOnce Bootstrapper\Packages\vcredist_x64\product.xml 我做了修改。
<Product xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper" ProductCode="Microsoft.Visual.C++.14.0.x64">
<!-- Defines list of files to be copied on build -->
<PackageFiles CopyAllPackageFiles="false">
<PackageFile Name="vc_redist.x64.exe" HomeSite="VCRedistExe" PublicKey="3082010a0282010100a829fed410c8ff550a9e990003528fdcb0bff9abf851fe5c8c54c227ce4c2b96ebdb811ccb862b79ca757eb867832686bdd62f1c3ec758aa8f6f95fb5afca7c61bc1c3e84c174e223db75b565c7fd75af52dbabba609bf067cee98fe40f930b86bfe406f74b3b8d63849c9d087072f31dfb6bc4ea3d09eb7627b5670754f67bf05cca3aebe0092c21b50a1613b100001b186d029f340f50fd9a30f57ab6309a8dca96ae74743a7be15c43d27a4e8565288cf5999a10084369bd039d22a0d2fe604e2bf13968883a95137184189e2f9859d8e651a3d0364ccc5de50705df20b85a98fb145e877ff839d09bb72e0e6560895b92b83128931fce758721dbdf983230203010001" />
</PackageFiles>
<InstallChecks>
<MsiProductCheck Property="VCRedistInstalled" Product="{03EBF679-E886-38AD-8E70-28658449F7F9}"/>
</InstallChecks>
<!-- Defines how to invoke the setup for the Visual C++ 14.0 redist -->
<Commands Reboot="Defer">
<Command PackageFile="vc_redist.x64.exe" Arguments=' /q '>
<!-- These checks determine whether the package is to be installed -->
<InstallConditions>
<BypassIf Property="VCRedistInstalled" Compare="ValueGreaterThanOrEqualTo" Value="3"/>
<!-- Block install if user does not have admin privileges -->
<FailIf Property="AdminUser" Compare="ValueEqualTo" Value="false" String="AdminRequired"/>
<!-- Block install on any platform other than x64 -->
<FailIf Property="ProcessorArchitecture" Compare="ValueNotEqualTo" Value="AMD64" String="InvalidOS"/>
<!-- Block install on Vista or below -->
<FailIf Property="VersionNT" Compare="VersionLessThan" Value="6.00" String="InvalidPlatformWinNT"/>
</InstallConditions>
<ExitCodes>
<ExitCode Value="0" Result="Success"/>
<ExitCode Value="3010" Result="SuccessReboot"/>
<DefaultExitCode Result="Fail" FormatMessageFromSystem="true" String="GeneralFailure" />
</ExitCodes>
</Command>
</Commands>
</Product>
我不确定
Product="{03EBF679-E886-38AD-8E70-28658449F7F9}"
,因为安装程序有 GUID {80586c77-db42-44bb-bfc8-7aebbb220c00}
(MsiProductCheck 无法使用它),所以我从 Microsoft Visual C++ 2017 x64 最小运行库 - 14.14.26429 中获取了 GUID。另一个可能性是使用 Microsoft Visual C++ 2017 x64 附加运行库 - 14.14.26429 的 GUID ({B12F584A-DE7A-3EE3-8EC4-8A64DBC0F2A7}
)。上面的脚本将安装最小和附加运行库,因此无论我们采用哪个 GUID 都不应该有影响。