使用VS2017安装程序项目安装vcredist_x64

3

我目前想为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 都不应该有影响。
3个回答

2

我曾经遇到过x86 redist的问题,最终发现是由于MS提供的vcredist_x86\product.xml文件引起的。你应该能够对vcredist_x64\product.xml文件采取同样的修复措施。

这个问题是由于从MS下载的实际redist文件与文件名和公钥不匹配导致的。

您需要在product.xmlPackageFiles\PackageFile节点和Commands\Command节点中将名称更改为vcredist_x64.exe,并将来自MS的Redist包重命名为vcredist_x64.exe。然后,将PackageFile节点中的publickey属性更改为与您从MS获得的EXE的公钥匹配。您可以通过使用文件资源管理器查看EXE的SHA1证书(属性 ->数字签名(SHA1) ->详细信息 ->查看证书 ->详细信息 ->公钥)来获取此内容。


谢谢。微软自己修复了vcredist_x64.exe,但对我来说仍然无法工作,因为下载路径已损坏。但是我找到了一个解决方案(请参见初始帖子)。 - SunBlack
你会认为在2018年,微软至少应该能够让这些东西像1995年那样正常工作。 - Kyle Huff

0

同样的问题。微软在他们的引导程序文件中有一个错别字。在 C:\Program Files (x86)\Microsoft SDKs\ClickOnce Bootstrapper\Packages\vcredist_x86\product.xml 中,将 vcredist_x86.exe 替换为 vc_redist.x86.exe 并重新加载 Visual Studio。


0
对于vs2015、vs2017和vs2019:我必须右键单击VC_redist.x86.exe文件,选择属性,然后选择数字签名选项卡,在上面选择sha256(而不是sha1),然后单击“详细信息”按钮以获取证书属性窗口,然后在其中的详细信息选项卡中。然后我必须向下滚动到公钥。从那里,我必须选择并复制ASCII转储窗口下方的十六进制公钥文本,因为复制到文件按钮只创建.cer文件。然后我必须在以管理员模式启动的Notepad++中编辑product.xml文件,否则您将无法保存更新后的文件。在将公钥文本粘贴到product.xml文件中之后,我必须选择密钥行并用""替换所有分隔十六进制数字的空格。然后我替换了PublicKey值,最后保存。
还有其他人认为在2020年,vc_redist.*.exe文件仍然没有版本号反映在名称中,下载站点没有在文本中指示版本,也没有指示公钥,因此唯一的方法是通过比较文件大小与您的上一个版本来知道它是否已更新吗?

更新时间2020-11-04:从https://support.microsoft.com/en-ca/help/2977003/the-latest-supported-visual-c-downloads下载了最新的redist并按照以上操作更新了product.xml后,使用更新后的msi文件安装我的应用程序时,出现错误提示“找不到以下软件包文件:vc_runtimeMinimum_x64.msi”。将今天下载的vc_redist exe文件与我以前使用的文件进行比较,我发现它更小。看来我得回到旧版本。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接