首页 > 解决方案 > 即使在安装 VC++ 2017 可再发行组件后,具有动态链接 VC++ 的 Windows 10 应用程序也无法启动

问题描述

我们目前正在测试一个 Windows 应用程序,该应用程序使用最新的 C++ Visual Studio 构建并在 Windows 10 上运行。该应用程序动态链接 VC++ 库(静态链接不是我们的选项)。

在我们测试人员的 75% 的机器(包括我们所有的开发机器)上,应用程序在安装后开箱即用,但在其他一些机器上,它在加载动态系统库的过程中(可能)无法启动并失败(因为它不会触发任何会像运行时错误一样写入小型转储的异常)。

  1. 其中一些用户遇到了有关缺少运行时 dll 的错误,这些错误在安装最新的 VC++ 2017 可再发行组件后得到解决,但应用程序仍然无法运行。
  2. 一位用户还使用 Dependencies 工具 ( https://github.com/lucasg/Dependencies ) 检查了库依赖项,但他的结果并不奇怪 - 工作机器上的输出和他自己的输出之间没有明显差异。在一些 UCRT 子依赖项旁边有几个问号(见截图:缺少模块,如 Dependencies 所示),但它们也在工作机器上,所以我认为它们是误报。
  3. 我还尝试将相关的 40 个 UCRT 和 VC++ dll 部署为可执行文件旁边的应用程序本地部署,但它仍然无法在受影响的机器上打开(我可能错过了一些相关的机器,或者它们仍然被引用自System32 文件夹)

你将如何调试这样的问题,前提是我们无法在本地重现它(它可以在两个全新的设备上开箱即用,安装全新的 Windows 10 并且没有构建环境)并且关于可能发生的事情的信息很少图书馆调用错了吗?

标签: c++visual-c++

解决方案


c000001d是非法指令异常代码。

您的目标是客户 CPU 不支持的指令集(如 AVX2 或 SSE4.1),或者可执行文件已损坏(例如,以文本模式而不是二进制模式下载)。

为获得最佳可移植性,请不要在使用 VC++ 编译时指定/arch:AVX或。/arch:AVX2然后,编译器将针对给定架构(x86 或带有 SSE2 的 x86_64)上可用的基本指令集。


推荐阅读