当应用程序崩溃时打开句柄会发生什么?(Windows XP 及以上版本)

Ali*_*Ali 3 windows vb6 handle

我的印象是,如果应用程序有一个打开的句柄并且崩溃了,则该句柄不会被释放,如果您尝试访问该句柄(假设是一个文件),那么您会收到错误。

但是,我在 Windows XP 中尝试过此操作,如果我在任务管理器关闭该 exe 之前关闭该句柄,该句柄似乎会被释放。以下是代码:

Private Sub Form_Load()
    Dim iFile As Integer
    iFile = FreeFile          
    Open "myfilelock" For Output Lock Read Write As #iFile
    MsgBox "About to close" 'close it here with task manager

    Close #iFile

End Sub
Run Code Online (Sandbox Code Playgroud)

那么,Windows XP 是否会释放所有打开的句柄,以防具有这些句柄的 exe 崩溃?

Joh*_*ler 5

当应用程序崩溃时,所有版本的 Windows 都会关闭内核句柄。甚至 Windows 95 也这样做了。当然,任何基于 Windows NT 内核或更高版本的东西都会在应用程序崩溃时关闭内核句柄。

这包括文件、事件、信号量、共享内存、管道和套接字的句柄