我实现了一个自我升级过程,其中我的主应用程序 exe 启动一个更新程序 exe,在命令行上将句柄传递给自身。应用程序 exe 然后调用 ExitProcess 退出,更新程序在传入的句柄上调用 WaitForSingleObject 以等待应用程序 exe 终止。
WaitForSingleObject 确实等待。直到应用程序调用 ExitProcess,更新程序才会停止。
但是,有时,当更新程序尝试用新版本覆盖应用程序 dll 时,我会收到一个文件锁定错误,我的更新程序的当前版本将其视为不可恢复的错误并终止。似乎包含任意 sleep(100) 足以绕过这个“问题”,但我真的很讨厌这样的代码。真的很讨厌。
对我来说似乎很奇怪,当主应用程序仍然存活到足以锁定 dll 文件时,可以向进程句柄发出信号。