我有一個自我升級過程實現的地方,我的主應用程序exe啓動一個updater exe在命令行上傳遞一個句柄給自己。應用程序exe然後調用ExitProcess退出,並且更新程序在傳入的句柄上調用WaitForSingleObject以等待應用程序exe終止。Windows何時發出進程句柄信號?
WaitForSingleObject等待。在應用程序調用ExitProcess之前,更新程序確實會停止。
但是,有時,當更新程序試圖用新版本覆蓋應用程序dll時,我得到一個文件鎖定錯誤,其中當前版本的updater將其視爲不可恢復的錯誤並終止。包括任意睡眠(100)似乎足以繞過這個「問題」,但我真的很討厭那樣的代碼。真的很討厭。
對於我來說,似乎很奇怪的是,當主應用程序仍然有足夠的活動時,進程句柄可以發信號通知,以鎖定dll文件。
似乎 - 實際上 - 只要有一個有效的退出代碼從GetExitCode()返回,進程句柄就會變成信號。但是,就常見用例而言,最想要等待進程句柄的應用程序是安裝程序/更新程序,需要知道它們何時能夠刪除內容。 – 2009-01-22 08:54:09