【发布时间】:2018-10-12 14:25:13
【问题描述】:
我有使用 VS 2017 15.7.4 构建的应用程序,它是 64 位命令行 C++ 应用程序。
我已将它与所有依赖项 DLL 一起复制到装有 Windows 10 Enterprise 2016 LTSB 64 位的机器上(版本为 10.0.14393)。应用程序有效。
然后我将它复制到另一台具有相同版本 Windows 的机器上。它立即停止并显示消息停止工作。
edit:找到原因,详情在cmets中
我试图解决的问题:
- Visual Studio 2017 可再发行组件不会改变这种情况。
- 事件日志中有一些崩溃事件,事件 1001:没有任何有用的信息,除了所有依赖模块 dll 已加载。
- 事件 1000:无用
- 事件 1005 有消息:
Windows 由于以下原因之一无法访问该文件: 网络连接有问题,该文件的磁盘 存储在此计算机上,或安装在此计算机上的存储驱动程序;要么 磁盘丢失。 Windows 关闭了 my_program.exe 程序,因为 这个错误。
程序:my_program.exe 文件:
错误值列在附加数据部分。用户操作
- 再次打开文件。这种情况可能是暂时的问题,当程序再次运行时会自行纠正。
- 如果文件仍然无法访问并且
- 它在网络上,您的网络管理员应该验证网络没有问题并且服务器可以 已联系。
- 它位于可移动磁盘上,例如软盘或 CD-ROM,请确认该磁盘已完全插入计算机。
- 通过运行 CHKDSK 检查并修复文件系统。若要运行 CHKDSK,请单击“开始”,单击“运行”,键入 CMD,然后单击“确定”。在命令下 提示,键入 CHKDSK /F,然后按 ENTER。
- 如果问题仍然存在,请从备份副本中恢复文件。
- 确定是否可以打开同一磁盘上的其他文件。否则,磁盘可能已损坏。如果是硬盘,请联系您的 管理员或计算机硬件供应商寻求进一步帮助。
附加数据错误值:00000000 磁盘类型:0
- 我尝试在不同的机器上编译它,使用 VS 2017 15.8.4(不同于 15.7.4),然后二进制文件在目标机器上工作。不过,这不是解决方案,因为这台机器不用于“夜间构建”。
- Depends 不显示任何缺失的依赖项
【问题讨论】:
-
“如何找出应用程序崩溃的原因” - 使用调试器。
-
嗯,这很难做到,因为它是没有调试器和发布二进制文件的生产机器。感谢您指出这一点,我将不得不尝试。我的猜测是,它是在程序本身启动之前的东西,DLL 或什么的东西......因为它在启动后立即崩溃。
-
您可以使用远程调试工具。即使对于发布版本,生成(但不是必须分发)调试符号也是一个好主意。
-
@MiroJanosik 调试发布版本可能很困难。如果您甚至没有调试符号,那么 非常 很困难。但不是不可能的。始终为您的发布版本生成调试符号。