windows - Windows何时发出进程句柄信号?

标签 windows winapi synchronization

我实现了一个 self 升级过程,其中我的主应用程序 exe 启动了一个更新程序 exe,在命令行上将句柄传递给自身。然后应用程序 exe 调用 ExitProcess 退出,更新程序在传入的句柄上调用 WaitForSingleObject 以等待应用程序 exe 终止。

WaitForSingleObject 会等待。在应用程序调用 ExitProcess 之前,更新程序会停止。

但是,有时,当更新程序试图用新版本覆盖应用程序 dll 时,我会收到一个文件锁定错误,我的更新程序的当前版本将其视为不可恢复的错误并终止。似乎包含一个任意的 sleep(100) 就足以绕过这个“问题”,但我真的很讨厌这样的代码。真的很讨厌。

我觉得很奇怪,进程句柄可以在主应用程序还活着足以锁定 dll 文件时发出信号。

最佳答案

进程在应用程序代码退出时发出信号。操作系统可能需要更多时间才能完全卸载该进程。发出信号的目的是说“我已经完成了我需要做的事情”,释放可能真正有用的东西的其他代码比让这些代码等待操作系统做一些内务处理更有效。

关于windows - Windows何时发出进程句柄信号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/468403/

相关文章:

c# - List<T> 没有实现 SyncRoot!

android - 如何将 Android 手机上的 SQLite 数据库与服务器上的 MySQL 数据库同步?

c++ - 获取包含windows系统目录的盘符

c - 开放管道上 CloseHandle 上的 sigsegv

windows - GetUserPreferredUILanguages() 永远不会返回超过两种语言

multithreading - 同步生产者、消费者和生产者队列

windows - VS2010 SP1 安装。 “The feature you are trying to use is on a network resource that is unavailable”

windows - Hello World 没有输出 - Qt SDK 2010 - Mingw (gcc 4.6.3) - WindowsXP

windows - Hadoop webhdfs 需要身份验证

c++ - 判断鼠标是否水平移动(C++)