【发布时间】:2014-11-05 09:50:36
【问题描述】:
我在几个来源中读到过,CreateProcess 不能从 DllMain 函数中调用。
不要从 DllMain 函数调用 CreateProcess。这会导致应用程序停止响应。
Dynamic-Link Library Best Practices:
您不应该在 DllMain 中执行以下任务: 调用 CreateProcess。创建一个进程可以加载另一个 DLL。
问题
这是为什么呢?它声明它导致应用程序停止响应,但这只是一个症状。真正的原因是什么?
我问的原因是我尝试从 DllMain 函数创建一个进程,它看起来工作得很好。
【问题讨论】:
-
因为它可能会造成死锁,但它不是必须的——它不保证能正常工作。您的尝试成功,其他尝试失败/锁定。
-
好的。但这是我无法控制的还是我可以以不可能出现死锁的方式进行编码?
-
这完全不在您的控制范围内。即使您确保用于创建新进程的可执行映像没有任何需要解决的依赖关系,系统也可以配置为在您背后加载模块(AppInit_DLL、全局挂钩等)。注意警告,您对此无能为力。
标签: winapi createprocess dllmain