Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在运行时禁用系统错误弹出窗口(DLL依赖项)_C++_Winapi_System Error - Fatal编程技术网

C++ 在运行时禁用系统错误弹出窗口(DLL依赖项)

C++ 在运行时禁用系统错误弹出窗口(DLL依赖项),c++,winapi,system-error,C++,Winapi,System Error,我正在处理一个WINAPI项目,它有几个.dll依赖项。 仅需澄清,请参见以下内容: MyApplication.exe Util.dll MySpecialValuable.dll 假设我从文件夹路径中删除了myspecialvaluel.dll;我会收到这样的信息: 我的问题是,有没有一种方法可以完全禁用弹出窗口-静默退出?或者在弹出窗口中隐藏.dll的名称? 这对大多数人来说似乎毫无意义,但我不想公开我正在使用的库。当您不使用导入库链接到.dll,而是在运行时使用LoadLibrary(

我正在处理一个WINAPI项目,它有几个.dll依赖项。 仅需澄清,请参见以下内容:

MyApplication.exe
Util.dll
MySpecialValuable.dll
假设我从文件夹路径中删除了
myspecialvaluel.dll
;我会收到这样的信息: 我的问题是,有没有一种方法可以完全禁用弹出窗口-静默退出?或者在弹出窗口中隐藏.dll的名称?
这对大多数人来说似乎毫无意义,但我不想公开我正在使用的库。

当您不使用导入库链接到.dll,而是在运行时使用
LoadLibrary()
加载它时,您可以无提示地失败。

您不能“无提示地退出”。当系统显示对话框时,进程尚未开始执行用户代码。导入由加载程序在执行用户代码之前解析

虽然可以通过配置系统来防止出现错误对话框(我不知道),但您还有其他选项:

  • 显而易见的一点是:发送所有依赖项。作为作者,您知道您的依赖关系。当加载时可以解析所有导入时,不会出现任何错误消息
  • 推迟导入解析,直到有机会处理失败。将各个DLL标记为将允许您执行此操作。有关更多信息,请参阅
  • 使用

确保你明白,这些选项都不能为你最终想要实现的目标提供解决方案。用户可以轻松启用并获取加载到进程中的每个模块的完整信息。

您必须在运行时加载dll,而不是链接到它。找出依赖性walker等工具使用的DLL仍然很容易,尽管找出您的程序正在使用的DLL并不重要。这是一个典型的错误,是由对平台不完全了解的人犯的。因为你不知道找到这些信息有多容易,所以你没有意识到它很简单。不要自欺欺人地说你可以隐藏这些信息。我知道找到我的依赖项可能非常简单——我只是想防止这些弹出窗口公然显示库的名称。