标签: vcredist

vcruntime140.dll 14.0 与 PHP 版本不兼容

我已经在 Windows Server 2016 机器上下载了PHP 7.4.1 NTS vc15 x86。我也下载安装了vc_redist.x86.exe

当我尝试从命令提示符运行 php-cgi 时,出现以下错误:

PHP 警告:'vcruntime140.dll' 14.0 与第 0 行未知中与 14.16 链接的 PHP 版本不兼容

关于如何解决这个问题的任何想法?我想我可以从档案中安装旧版本的 PHP,但这并不能真正解决问题。

php vcredist windows-server-2016

65
推荐指数
6
解决办法
9万
查看次数

Wix Burn vcredist

我有一个使用Visual Studio 2015开发的c ++应用程序,以及一个Wix安装程序和一个Burn bootstrapper.该应用程序的早期版本能够使用Visual Studio合并模块来安装必要的先决条件,但在使用Visual Studio 2015时看起来这不是一个选项(请参阅Redistributables用于部署在Windows 7上使用Visual Studio 2015开发的C++ exe)).

根据该链接中的建议,我们已经开始使用带有vital ="yes"的ExePackage在Burn中安装vcredist.这通常很有效 - 我们有几个客户由于vcredist的各种问题导致安装失败.直到最近,这些都是导致安装失败的错误.

在过去的几天里,由于安装了较新版本的可再发行组件,我们收到了几个安装程序失败的报告:vcredist失败,错误代码为0x80070666,导致我们的引导程序失败.

我的问题是:

  1. 正在部署vcredist的"正确"方法吗?(假设我们需要一个exe安装程序)
  2. 我们如何知道安装了哪些版本的可再发行组件(不一定在引导程序中,这些信息是否以某种用户可读形式存储)?
  3. 是否有我们应该分发的可再发行版本的更新版本?(目前使用14.0.23026)这是基于用于编译的Visual Studio版本还是应该始终分发最新版本?(当前VS版本14.0.23107.0)
  4. 作为最后的手段,是否可以检测从vcredist返回的错误代码并允许该值确定安装是继续还是失败?

wix burn vcredist visual-studio-2015

19
推荐指数
1
解决办法
7449
查看次数

在哪里下载vcredist?

我觉得这个问题有点愚蠢,但我希望这对其他人也有帮助.

背景:我们正在使用Visual Studio 2008 SP1(VC9)开发一些软件.我们想vcredist在cd上提供软件.

现在,我习惯了谷歌"下载vcredist 2008 sp1",通常它会引导我到以下(也是书签)网页:

我想我已经下载不同版本(9.0.30729.01后来9.0.30729.17从同一个URL),因为它们来到可用.今天,该页面上只有.17可用.现在,一位客户抱怨并告诉我有一个9.0.30729.6161可用,但我找不到它.我能得到的最接近的是9.0.30729.5677:

有一个URL我可以随时提取最新版本吗?

是否有某种通知系统(电子邮件列表,rss-feed,...)通知我一个新的vcredist?

msdn technet vcredist

14
推荐指数
1
解决办法
4万
查看次数

用于应用程序本地部署的MSVC 2015 Universal CRT

据宣布,Universal CRT将是一个可重新分发的DLL,因此应用程序本地部署仍然是可能的.

我已经安装了Visual Studio 2015 Express Edition,我在SDK目录中寻找ucrtbase.dll,但我找不到任何东西.我查看的目录是"C:\ Program Files(x86)\ Microsoft SDKs\Windows Kits\10",但在"Microsoft.UniversalCRT.Debug"下只有CRT的调试版本.

我不想从我的系统中复制任何DLL,我总是只从"Redist"目录中打包文件.因此,例如(与之前版本的MSVC一样),我从"C:\ Program Files(x86)\ Microsoft Visual Studio 14.0\VC\redist\x86\Microsoft.VC140.CRT"重新分发文件,其中包含x86版本的我的应用.

我可以下载包含ucrtbase.dll或Visual Studio或SDK更新的软件包吗?

此外,我不确定是否只是ucrtbase.dll就足够了,因为应用程序似乎链接到存根DLL api - *.dll,我不确定是否需要将它们重新分发为好.

c++ deployment redistributable vcredist visual-studio-2015

12
推荐指数
1
解决办法
8076
查看次数

如何检测是否安装了Visual C++ 2017 Redistributable

随着Microsoft在其最新版本中更改注册表项的模式,我如何检测是否在计算机上安装了Visual C++ 2017 Redistributable?

我的目标是安装VC++ 2015Redist,因为该软件是使用VS2015编写的.如果我能在一台机器上成功检测到VC++ 2017Redist,那么我跳过安装VC++ 2015Redist

redistributable visual-c++ vcredist visual-c++-2015 visual-c++-2017

10
推荐指数
3
解决办法
9794
查看次数

C++:从不同目录中清除并动态加载DLL

我想要实现的长篇故事

我正在研究一个动态加载DLL作为插件的程序.我正在使用Microsoft Visual C++ 2008编译程序.但是,我们假设应该支持任何与Qt一起工作的Visual C++版本.程序目录布局如下:

| plugins/
|   plugin1.dll
|   plugin2.dll
| QtCore4.dll
| QtGui4.dll
| program.exe
Run Code Online (Sandbox Code Playgroud)

program.exe发现所有插件DLL文件,对它们执行LoadLibrary()并调用某个签名函数来查明它是否实际上是一个插件.这对于安装了MSVC90的vcredist的计算机非常有效.当然,要使程序在所有计算机上运行,​​我必须使用msvc*.dll文件和相应的清单文件重新分发它.Qt DLL还需要redist才能运行.

现在,我已经设置了cmake来根据所选的Visual Studio版本自动复制适当的redist DLL和manifest.为了简单起见,让我们继续假设我正在使用MSVC90.当redist被复制到程序目录时,布局如下所示:

| plugins/
|   plugin1.dll
|   plugin2.dll
| QtCore4.dll
| QtGui4.dll
| msvcm90.dll
| msvcp90.dll
| msvcr90.dll
| Microsoft.VC90.CRT.manifest (I'm also aware that this file is bugged in VS2008)
| program.exe
Run Code Online (Sandbox Code Playgroud)

关于清单文件中的错误:http://www.cmake.org/pipermail/cmake/2008-Stembertember/023822.html

问题

具有此布局的程序现在可以在没有安装redist的计算机上运行,插件没有加载.为了让插件加载,我必须执行以下操作之一:

  1. 将清单文件复制到plugins/目录.从清单文件中删除对msvc*.dll文件的所有引用.这有效,但它并不好,因为我必须支持不同版本的已编辑清单文件,具体取决于使用的MSVC的版本.此外,我不知道这是否会在2008年以外的Visual Studio中破坏.
  2. 将整个redist复制到plugins/目录.这不需要对清单文件进行任何修改,但现在program.exe愚蠢地尝试加载msvc*.dll文件,认为它们是插件.当然,这会优雅地失败,所以不会造成太大的伤害.另一个缺点是程序包的大小增加了1 MB以上.不过,这两个问题都是我可以接受的.
  3. 使用/ MT开关编译插件.简短的测试表明,这实际上是有效的,但我不确定将来如果Qt和program.exe/ MD 都不会破坏任何东西.

问题

什么是最好的解决方案?什么是正确的解决方案?如果有多个正确的解决方案,那么这是最佳做法?我是第一个尝试这样做的人吗? …

c++ dll manifest loadlibrary vcredist

8
推荐指数
1
解决办法
1316
查看次数

WIX在安装时运行vcredist_x64.exe

我有一个在VS 2015中编译的应用程序,需要VC++ Redistributable包才能正常运行.在此最新版本之前,我们使用的是旧版本的VS,只是使用合并模块来处理相应redist文件的安装.但是,我注意到在2015年使用最新版本的合并模块(Microsoft_VC140_CRT_x64.msm)时,我的应用程序仍然无法开箱即用. 我做了一些挖掘,看来有些东西已经改变了最新版本的合并模块.看来Microsoft现在建议直接安装vcredist_x64.exe软件包而不是使用合并模块.

所以,我正在尝试创建一个自定义操作来执行此操作.我在这里遵循类似的教程,尽管它适用于VC Redistributable可执行文件.我需要做的第一件事是设置安装后将放置.exe文件的位置:

<Directory Id='APPLICATIONROOTDIRECTORY' Name='MyApp'>
  <Directory Id="VCREDISTDIR" Name="VCRedist">
  </Directory>
</Directory>
Run Code Online (Sandbox Code Playgroud)

然后,我需要将我的文件添加到一个组件组中,该组件组将作为隐藏功能的一部分进行安装(因为我希望自动安装).

<ComponentGroup Id="VCRedist" Directory="VCREDISTDIR">
  <Component Id="vcredist_x64.exe" Guid="-INSERT-GUID-HERE-" Win64="yes">
    <File Id="VCREDISEXE" Name="vcredist_x64.exe" KeyPath="yes" Source="$(var.VCRedistSourceDir)" Checksum="yes"></File>
  </Component>
</ComponentGroup>
Run Code Online (Sandbox Code Playgroud)

和...

<Feature Id="VCRedistributable" Title="Visual C++ Runtime" AllowAdvertise="no" Display="hidden" Level="1">
  <ComponentGroupRef Id="VCRedist" />
</Feature>
Run Code Online (Sandbox Code Playgroud)

此时,应将vcredist_x64.exe复制到最终用户的计算机.现在,我需要创建一个自定义操作以在安装后启动可执行文件.

<CustomAction Id="InstallVCRedistributable"
          FileKey="VCREDISEXE"
          Execute="deferred"
          ExeCommand="/silent"
          Impersonate="no"
          Return="check"/>

<InstallExecuteSequence>
  <Custom Action="InstallVCRedistributable" Before="InstallFinalize">
    <![CDATA[NOT REMOVE]]>
  </Custom>
</InstallExecuteSequence>
Run Code Online (Sandbox Code Playgroud)

我还在我的UI中包含一条状态消息,以便我可以看到可执行文件的执行时间.

<UI>
  <ProgressText Action="InstallVCRedistributable">Installing Visual C++ Redistributable for Visual Studio 2015</ProgressText>
</UI>
Run Code Online (Sandbox Code Playgroud)

现在,当我运行我的安装程序时,它应该启动vcredist_x64.exe ......它确实......但是在安装该可执行文件期间它会被挂起.我收到一条弹出消息,指出此Windows …

wix vcredist visual-studio-2015

7
推荐指数
2
解决办法
5859
查看次数

如何将VC++ 2015可再发行组件与我的ClickOnce(.NET)应用程序捆绑在一起?

我在通过Microsoft ClickOnce部署的.NET Framework 4.5上运行了一个C#应用程序.我还在使用一个名为DComPerm.exe的Microsoft SDK中的小实用程序,这是一个C++应用程序,我必须单独编译.我的主应用程序用于Process.Start()访问此可执行文件.

当我第一次尝试在客户端计算机上运行它时,我收到一条错误消息,指出当应用程序尝试调用DComPerm.exe时VCRUNTIME140.dll丢失.

VCRUNTIME140.dll缺失

这是有道理的...因为该程序是用C++编译的,所以它需要Visual C++ 2015 Redistributable包,它尚未安装在客户机上.我想让它尽可能轻松,所以我希望我可以将VC++ 2015 Redist与我的ClickOnce应用程序捆绑在一起.在项目属性>发布选项卡下,有一个前提条件按钮,它允许我指定应用程序应该捆绑可再发行组件包.

这在理论上听起来很棒,但它不起作用.现在,当我尝试在客户端计算机上安装ClickOnce应用程序时,它不起作用.安装失败并指向一个日志文件,其中包含以下相关信息:

'Visual C++"14"运行时库(x86)'RunCheck结果:需要安装

安装组件的Visual C++"14"运行时库(x86)'已被接受.

将文件复制到临时目录"C:\ Users\Owner\AppData\Local\Temp\VSD3872.tmp \"

将文件下载到"C:\ Users\Owner\AppData\Local\Temp\VSD3872.tmp \"

(8/4/2016 12:57:48 PM)将'vcredist_x86\vcredist_x86.exe'从' http://go.microsoft.com/fwlink/?LinkID=800028&clcid=0x409 '下载到'C:\ Users\Owner \应用程序数据\本地的\ Temp\VSD3872.tmp \"

下载完成于2016年8月4日12:57:49 PM

下载失败,HRESULT = -2146697208

这消息使得它很清楚是什么问题:链接,它正试图使用下载的REDIST包已经死了.只有...我不知道怎么能告诉它找到正确的链接.我很惊讶它无法自动找到它,因为这似乎是Visual Studio的一个错误.一些搜索显示正确的链接实际上是这个,但这不是ClickOnce正在解决的.我还看到通过选中框,这是我的csproj文件的相应XML更新:

<BootstrapperPackage Include="Microsoft.Visual.C++.14.0.x86">
  <Visible>False</Visible>
  <ProductName>Visual C++ "14" Runtime Libraries %28x86%29</ProductName>
  <Install>true</Install>
</BootstrapperPackage>
Run Code Online (Sandbox Code Playgroud)

我可以使用一些XML标记来明确指定位置吗?或者我怎么能解决这个问题?如何在不破坏我的应用程序的情况下捆绑可再发行组件?

.net c# c++ clickonce vcredist

6
推荐指数
1
解决办法
2526
查看次数

Wix 每个用户安装程序以检测 Visual C++ 2015 Redistributable

我正在创建一个 .msi 安装程序,它必须确定系统中是否存在 Visual C++ 2015 Redistributable,如果没有,则使用自定义消息中断安装。官方 Wix 文档指的是 VC++ 的实际安装,我不希望这样做,因为我的安装程序是“每个用户”,还有其他几个 stackoverflow 问题是指包而不是 .msi http://wixtoolset .org/documentation/manual/v3/howtos/redistributables_and_install_checks/install_vcredist.html
Wix Burn vcredistWIX 检查是否安装了 VS2015 C++ redistributablehttps: //gist.github.com/nathancorvussolis/6852ba282647aeb0c5c00e742e28eb48

所以我想问题是,如何有效地检测每个用户安装程序中 Visual C++ 2015 Redistributable 的存在。

windows-installer wix vcredist

6
推荐指数
1
解决办法
3535
查看次数

Visual C++ 2017 Redistributable包可以支持使用VC2015的应用程序吗?

如果我在我的机器上只安装Visual C++ 2017 Redistributable,它是否可以支持为2015年编写的应用程序

换句话说,如果我卸载Visual C++ 2015 Redistributable并安装Visual C++ 2017 Redistributable,那么所有应用程序都可以正常运行吗?

c++ redistributable vcredist visual-c++-2015 visual-c++-2017

5
推荐指数
1
解决办法
2646
查看次数