我的 Win32 控制台应用程序使用第三方库。在它退出 WinMain 全局对象后,破坏开始并且 AV 发生在内部深处的某个地方。我真的很想写
TerminateProcess( GetCurrentProcess(), 0 );
WinMain 末尾附近的某个地方。如果我这样做,应用程序将正常结束。
但是MSDN says这样做会损害由动态链接库 (DLL) 维护的全局数据的状态,这一点尚不清楚。我知道如果我有一些全局对象,它的析构函数不会运行,我就有可能无法完成数据库连接或类似的事情。我的程序中没有类似的东西。
使用 TerminateProcess 到底有什么风险?如何确定我是否可以将其用于我的目的?
最佳答案
根据它和 ExtiProcess 的文档,似乎主要的问题是 DLL 在没有调用带有标志 DLL_PROCESS_DETACH 的 DllMain 的情况下被卸载。
我的 2cents:文档是偏执的,你会扰乱一些在 DllMain + DLL_PROCESS_DETACH 中运行的关键操作。任何依赖它来维持临界状态的人都已经受到任务管理器的支配,所以我认为使用这个 API 不会有很大的风险。
关于windows - 使用 TerminateProcess 时到底有什么风险?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1276223/