Tôi có một quá trình gọi CreateProcess
. Có vẻ như CreateProcess
trả về kết quả không thành công. Tuy nhiên, xử lý cho quá trình sau đó được thiết lập ngay lập tức, cho biết quá trình đã thoát. Khi tôi gọi GetExitCodeProcess
, STATUS_DLL_NOT_FOUND
sau đó được trả lại.CreateProcess STATUS_DLL_NOT_FOUND - dll nào?
Tôi hiểu rằng một DLL bị thiếu. Tôi thậm chí biết chính xác cái nào. Tuy nhiên, những gì tôi không hiểu là làm thế nào để con số đó ra lập trình.
Tôi nhận thấy rằng Windows sẽ trình bày một hộp thoại cho biết rằng quá trình không khởi động được vì nó không thể tìm thấy tệp DLL được chỉ định (ảnh chụp màn hình: http://www.mediafire.com/view/?kd9ddq0e2dlvlb9). Trong hộp thoại, Windows chỉ định tệp DLL nào bị thiếu. Tuy nhiên, tôi không tìm cách nào để có được thông tin đó một cách tự lập.
Nếu một quy trình không khởi động được và sẽ trả về STATUS_DLL_NOT_FOUND
, làm cách nào để truy xuất theo chương trình tên thư viện mà quy trình đích được liên kết không tìm thấy? Bằng cách đó tôi có thể tự động ghi lại trong một báo cáo lỗi những gì DLL dường như bị thiếu hoặc bị hỏng trong một cài đặt nhất định.
Tôi ước tôi biết câu trả lời. Phụ thuộc Walker làm điều đó, nhưng nó sử dụng API gỡ rối đòi hỏi một quá trình riêng biệt và nhảy nhiều vòng. (Bạn có thể tắt hộp thoại đó, BTW, ví dụ nếu quá trình của bạn chạy không cần giám sát và bạn muốn nó bị xóa sạch hơn là treo.) –
có thể trùng lặp? http://stackoverflow.com/questions/597260/how-to-determine-a-windows-executables-dll-dependencies-programatically –
Điều này không trả lời câu hỏi của bạn, nhưng bạn có thể sử dụng ['SetErrorMode()'] (http://msdn.microsoft.com/library/ms680621) để kiểm soát xem Windows có hiển thị hộp thoại thông báo lỗi khi DLL không tải được hay không; tuy nhiên, không có cách nào để truy cập dữ liệu sẽ được hiển thị trong hộp thoại báo lỗi. –