windows - 使用 TerminateProcess 时到底有什么风险?

标签 windows winapi visual-c++ process

我的 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/

相关文章:

c++ - 在类中初始化静态 union

windows - echo %PATH% 是否仅扩展到系统变量或用户变量?

c++ - Windows 10 上原生 C++ 应用程序的自定义标题栏颜色

c++ - 无法将项目添加到 Win32 列表框控件

c++ - 通过旧的(非 wchar)API 函数在非 ANSI 系统上打开文件

c++ - 如何在我的 vc++ 代码中包含 CTime

Windows SuspendThread 没有? (GetThreadContext 失败)

windows - 使用 Wix 安装应用程序以在 Windows 关机时运行

windows - 在 Windows 中,如何找出哪个进程位于本地网络套接字的另一端?

c++ - 监听进程开始和结束