【问题标题】:Win32 console-only app, prevent "missing dll" dialog boxWin32 仅控制台应用程序,防止出现“缺少 dll”对话框
【发布时间】:2013-10-24 09:34:44
【问题描述】:

我已经构建了一个 VS2010 控制台应用程序。当我在没有必要 dll 的机器上运行此应用程序时,会弹出一个对话框,并显示消息“程序无法启动,因为您的计算机中缺少 MSVCR100.dll”。这很公平。

问题是程序挂起,直到有人单击确定。

这个程序是复杂的自动构建设置的一部分,所以我真的需要它以错误代码终止。

是否有任何解决方案(例如 VS2010 项目设置选项)我可以申请解决此问题?

【问题讨论】:

  • 您可以尝试在启动应用程序之前调用SetErrorMode(假设您控制启动过程),但我不知道它是否适用于 DLL-not-found 消息框。
  • arx 是对的。我刚刚遇到了同样的问题,SetErrorMode(SEM_FAILCRITICALERRORS) 阻止了模式错误消息,而是 CreateProcess 调用成功但进程返回 STATUS_DLL_NOT_FOUND 作为退出代码

标签: c visual-studio-2010 winapi console-application


【解决方案1】:

您可以将项目更改为静态链接 CRT 而不是动态链接它(将运行时库选项设置为 多线程 而不是 多线程 DLL )。

【讨论】:

  • 这将解决问题,我同意。但是为了满足我的好奇心,我真的很想知道是否可以将对话框“重定向”到控制台。在某些情况下强制控制台应用使用 GUI 似乎是错误的。
  • 我认为没有办法重定向对话框(反正我从来没有遇到过)。我能想到的唯一其他选择是尝试delay loading 有问题的 DLL,使用异常处理程序捕获故障并通过向控制台发送消息中止进程。但是,我不知道这是否适用于 CRT DLL。
  • @Jakob 通常,您可以通过LoadLibraryGetProcAddress 手动加载DLL,然后您可以随意处理失败。但对于 CRT DLL,我认为静态链接是可行的方法。
猜你喜欢
  • 1970-01-01
  • 2011-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-04
  • 1970-01-01
  • 2017-04-14
  • 1970-01-01
相关资源
最近更新 更多