Tôi có một quá trình tự nâng cấp được thực hiện khi exe ứng dụng chính của tôi khởi chạy một exe cập nhật và xử lý chính nó trên dòng lệnh. Các exe ứng dụng sau đó gọi ExitProcess để thoát ra, và các cuộc gọi updater WaitForSingleObject trên đã qua trong xử lý để chờ cho exe ứng dụng chấm dứt.Khi nào các cửa sổ báo hiệu một quá trình xử lý?
WaitForSingleObject sẽ đợi. Cho đến khi ứng dụng gọi ExitProcess thì trình cập nhật không hoạt động.
Tuy nhiên, đôi khi, khi trình cập nhật cố gắng ghi đè lên các dll ứng dụng bằng các phiên bản mới, tôi nhận được lỗi khóa tệp mà phiên bản hiện tại của trình cập nhật của tôi coi là lỗi không thể khôi phục và chấm dứt. Dường như bao gồm một giấc ngủ tùy ý (100) là đủ để bỏ qua "vấn đề" này nhưng tôi thực sự ghét mã như thế. thực sự ghét.
Có vẻ như rất kỳ quặc đối với tôi rằng quá trình xử lý có thể được báo hiệu trong khi ứng dụng chính vẫn còn đủ sống để có tệp dll bị khóa.
Dường như - thực tế - xử lý xử lý sẽ được báo hiệu ngay sau khi có mã thoát hợp lệ để trả về từ GetExitCode(). Tuy nhiên, xét về các trường hợp sử dụng phổ biến, các ứng dụng thích hợp nhất để chờ xử lý xử lý là các trình cài đặt/cập nhật cần biết khi nào chúng có thể xóa nội dung. –