问题标签 [vcredist]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1377 浏览

visual-studio - 如何检测是否已经安装了特定版本的 vcredist_x86.exe?

作为安装的一部分,我创建了一个运行 vcredist_x86.exe(版本 9.0.xx)的安装程序。但是,在安装它之前,我想知道它是否已经在用户的系统中。我基本上不仅需要检测 DLL 是否存在,而且它们是否具有正确的版本号。有没有可靠的方法来做到这一点?

我正在使用 NSIS,但欢迎任何解决方案。

0 投票
2 回答
285 浏览

c++ - 无法找到目标计算机上肯定存在的私有程序集

我们将 Visual C++ 运行时分发为私有程序集(即,将 msvcp90.dll、msvcm90.dll、msvcr90.dll 和 Microsoft.VC90.CRT.manifest 放入与我们的应用程序的可执行文件)。到目前为止,在每台非开发机器(数百台)上,这都很好。但是,我一直在追踪一台完全无法找到这些程序集的特定问题机器。

他们正在运行 XP,所以当他们尝试启动我们的应用程序时,他们会收到以下消息

此应用程序无法启动,因为应用程序配置不正确。重新安装应用程序可能会解决此问题。

我让他们在我们的应用程序的 exe 上运行Dependency Walker,它表明它找不到 msvcp90.dll 或 msvcr90.dll。然后我让他们追踪我们应用程序的目录内容,这表明那些“丢失”的 DLL 实际上是它们应该在的位置(在与 exe 相邻的 Microsoft.VC90.CRT 目录中),但无论如何,应用程序只是在启动时找不到它们。

作为最后的手段,我让他们直接安装可再发行组件,但这主要只是为了排除故障,因为我们更愿意继续分发 DLL 而无需额外的安装程序(我们的应用程序无需任何安装即可运行)。


我可能还应该包含我们应用程序自己的清单:

编辑:我之前提到没有 a dependentAssembly,但我意识到它正在生成,所以上面的清单反映了它创建的实际清单。


什么会导致程序根本找不到这些依赖项? 它发现它们在许多其他计算机上都很好,其中大多数以前从未见过这些运行时。我可能搞砸了一些基本的东西(很可能在我的清单中),但到目前为止它在 99% 的客户端计算机上运行良好。

作为奖励,这篇文章是对私有程序集的一个很好的总结,但到目前为止它还没有帮助我解决问题。

更新:将 DLL 移动到与 EXE 相同的目录后,它仍然无法启动。然后,在安装 redistributables之后,它启动得很好。所以看起来它要么没有在本地目录中查找,要么由于某种原因认为本地 DLL 不可接受。

0 投票
0 回答
1610 浏览

windows - 为什么安装 MSVC 可再发行组件需要管理员权限?

这是在 Windows 上部署应用程序的一个非常令人沮丧的部分。我们有两个选择:在我们的应用程序目录中重新分发所需的 DLL,或者使用合并模块和管理员权限在系统范围内安装它(如果尚未安装)。在我看来,微软可以简单地对他们的 DLL 进行数字签名,并允许将这些 DLL 安装到 WinSxS 中而无需提升。.NET 也可以这样做。

静态运行时和根本不使用 CRT 不是选项,因为我的一些代码是 C++/CLI,它与 /MT 开关互斥(也可能与其他 C++ 标准库,如 STLPort,但我还没有确认)。

0 投票
2 回答
28397 浏览

vcredist - vcredist_x86:出现 install.res.????.dll 消息

我们的设置运行带有参数 /qb 的 vcredist_x86.exe以使其静默。这适用于我们所有的测试系统,但不幸的是,安装仍然在客户计算机上显示一条消息。

请看下面的图片 - 有没有人猜到或知道这条消息的来源?我在这里和谷歌上找不到任何东西,有人说它发生在英语 Windows XP(客户拥有)上,但不是在德语上。

InnoSetup 拥有完整的管理权限,并在其 [Run] 部分中启动了 vcredist_x86.exe 版本 9.0.21022.8。我们的应用程序不是用 VC 编写的,而是使用了 GAUSS 运行时引擎。

在显示 InnoSetup 的“完成安装...”时,出现 install.res.????.dll 消息

0 投票
1 回答
528 浏览

windows - 如何使 vcredist 成为我的 MSI 安装程序的启动条件?

我有一个安装项目,我想为我的应用程序安装程序创建vcredist_x86 20082010 启动条件。有没有办法做到这一点?如果是这样,怎么做?

0 投票
1 回答
45258 浏览

msdn - vcredist在哪里下载?

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

背景:我们/我正在使用Visual Studio 2008 SP1 (VC9)开发一些软件。我们想提供vcredist该软件的光盘。

现在,我习惯于向谷歌询问“下载 vcredist 2008 sp1”,通常它会引导我访问以下(也已添加书签)网页:

我想我已经从相同的 URL下载了不同的版本(9.0.30729. 01和更高版本的 9.0.30729. 17 ),因为它们可用。今天,该页面上只有.17可用。现在,一位客户投诉并告诉我有一个 9.0.30729。6161可用,但我找不到。我能得到的最接近的是 9.0.30729。5677

是否有一个网址可以让我随时获取最新版本?

是否有某种通知系统(电子邮件列表、rss-feed、...)通知我有关新的 vcredist 的信息?

0 投票
1 回答
1551 浏览

64-bit - msvcr100.dll 错误 - WinXP x64

我正在尝试在 XP 64 位系统上运行在 VS2010 中创建的程序。它在 XP-SP3 32 位以及所有 Windows 7 版本上运行良好。但是,在 XP 64bit 上运行时,它只是在尝试加载显示错误引用时崩溃:ModName: msvcr100.dll ModVer: 10.0.30319.1 Offset:00000000000760d9

我意识到它引用的文件与 2010 vcredist 有关,它与程序一起安装,在检查我有最新版本后发现我们正在安装的那些需要 XP-sp3(64 位 XP 不存在)。所以我尝试安装最新的 2010-SP1 Redistributable(它没有说它需要 XP-SP3)但同样的错误仍然适用。

尝试在 XP 64bit 上运行程序时,有人遇到过这样的错误吗?我是否可能认为这是由 vcredists 引起的错误方向?还是根本不可能在没有 SP3 的 XP 操作系统上运行需要 2010 vcredists 的程序?

0 投票
3 回答
1609 浏览

c++ - C ++:从不同目录显示并动态加载DLL

我正在努力实现的长篇故事

我正在开发一个将 DLL 作为插件动态加载的程序。我正在使用 Microsoft Visual C++ 2008 编译程序。不过,我们假设应该支持 Qt 使用的任何 Visual C++ 版本。程序目录布局如下:

program.exe发现所有插件 DLL 文件,对其执行 LoadLibrary() 并调用某个签名函数来确定它是否真的是插件。这在安装了 vcredist for MSVC90 的计算机上运行良好。自然,为了使程序在所有计算机上运行,​​我必须使用 msvc*.dll 文件和适当的清单文件重新分发它。Qt DLL 也需要 redist 才能运行。

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

关于清单文件中的错误:http ://www.cmake.org/pipermail/cmake/2008-September/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 将来它是否不会破坏任何东西。

问题

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

更新 1(2012 年 11 月 18 日)

虽然这个问题仍未得到解答,但我决定走最不让人头疼的路线。到目前为止,我一直在使用第 1 号解决方案,我决定坚持使用它。如果 CMake 检测到用户使用的 MSVC 版本与 2008 不同,它将显示一条警告消息,指出不完全支持自动打包。

0 投票
0 回答
1184 浏览

c++ - Visual Studio 2008 项目的错误消息“并行配置不正确”

我和我的朋友正在尝试用 Visual C++ 2008 Express 开发软件。我们已经使用Inno Setup构建了一个安装文件。我们正在使用Release build 来创建安装文件。但问题是,安装文件在我的电脑和我朋友的电脑上运行良好。但我们也尝试在其他两台 PC 上设置该软件。该软件已成功安装,但是当我们尝试运行该软件时,出现以下消息:

在此处输入图像描述

所以我们试图修复它。从命令提示符(我们从 Internet 上找到)我们写了“sfc/scannow”,但它没有解决。我们正在使用 Redistributables 2008、2008 SP1 和 2005。

在此处输入图像描述

从 Internet 我们发现,如果我们将“解决方案属性 -> 配置属性 -> C/C++ -> 代码生成 ---> 运行时库”从Multi-threaded Debug DLL (/MDd)更改为1. Multi-threaded (/MT) 或 2. 多线程调试 (/MTd)它可能会有所帮助。但是当我们更改它并尝试在Release Win32中构建解决方案时,它失败了。它说:

1>cl : 命令行错误 D8016 : '/MT' 和 '/clr' 命令行选项不兼容

我认为问题出在 Redistributables 2008、2008 SP1 和 2005 上。如果是这样,我如何为我的解决方案找到正确的版本“redist 2008、2008 sp1 和 2005”?

或者,如果不是真的,我该如何解决这个问题?

0 投票
0 回答
2417 浏览

windows-xp - 错误:未找到 COREDLL.dll

我正在尝试运行一个程序,但这会发生以下错误:

错误:无法启动此应用程序,因为找不到 COREDLL.dll

这个错误出现在WinXP和Win7

我下载了 Microsoft Visual C++ 2010 Redistributable Package (x86) 但此错误继续存在。

会是什么?我该如何解决?

谢谢,