Nếu tôi liên kết một mô-đun với mydll.dll, được triển khai bằng WinSxS, tiêu đề PE trong mô-đun của tôi sẽ chỉ đơn giản là tham chiếu "mydll.dll". Làm thế nào để Windows xác định trong thời gian chạy, trước hết là phụ thuộc này nên được tải thông qua WinSxS, và thứ hai là những gì lắp ráp nó trong?Làm thế nào để WinSxS phân giải các tên DLL thành các vị trí DLL?
Trả lời
Làm như vậy thông qua "ngữ cảnh kích hoạt". Theo tôi, WinSxS không có ý nghĩa gì cho đến khi bạn tìm hiểu về ngữ cảnh kích hoạt và cách nó được quản lý.
Tôi đã đặt một bài đăng trên blog khá dài giải thích chi tiết tại số http://omnicognate.wordpress.com/2009/10/05/winsxs/. Để tóm tắt bài báo, bối cảnh kích hoạt là một cấu trúc mà WinSxS sử dụng trong thời gian chạy để giải quyết các tên đối tượng không phiên bản (ví dụ: tên DLL) để có thông tin đầy đủ về cách định vị chúng. Mục đích của "manifest" trong WinSxS là xây dựng các bối cảnh kích hoạt. Nếu không hiểu cách thức và khi nào các bối cảnh kích hoạt này được xây dựng và cách chúng được quản lý (chúng được tổ chức trên một ngăn xếp thread-local) thì không thể lý do thông qua các bước liên quan đến việc tải một DLL thông qua WinSxS và do đó không thể chẩn đoán được phần lớn các vấn đề có thể phát sinh.
Bài viết này đã được đăng ở định dạng Q/A do các đề xuất về meta: http://meta.stackexchange.com/questions/24608/what-is-the-etiquette-for-posting-an-article. –
Lưu ý: Tôi đề nghị đưa ít nhất một ít bài viết vào câu trả lời, để thiết lập sự liên quan của nó. –
- 1. WinSxS không tải được VC++ DLL
- 2. Làm thế nào để tạo một dll như shell32.dll có chứa các biểu tượng
- 3. Làm thế nào để xem các hàm DLL?
- 4. Thứ tự các vị trí được tìm kiếm để tải các DLL được tham chiếu theo thứ tự nào?
- 5. Làm thế nào để bảo vệ dll?
- 6. Làm thế nào để tạo dll trong MATLAB và sử dụng các dll này trong các ứng dụng .Net
- 7. Đang tải DLL từ một vị trí trong bộ nhớ
- 8. Plugin DLL phụ thuộc vào các tệp DLL khác
- 9. Lấy tên của một DLL từ bên trong dll
- 10. Làm thế nào để liên kết một .DLL tĩnh?
- 11. Làm thế nào để đặt các thành phần tại các vị trí cụ thể?
- 12. msvcp90.dll phụ thuộc vào sai msvcr90.dll?
- 13. tên hàm DLL sử dụng dumpbin.exe
- 14. Khi xây dựng một tệp DLL, tệp LIB được tạo có chứa tên DLL không?
- 15. So sánh nhị phân DLL
- 16. C#: Làm thế nào để bao gồm DLL phụ thuộc?
- 17. Làm thế nào để tìm một DLL cho một CLSID?
- 18. Làm thế nào để tạo một số lớp từ dll (constructor in dll)? (С ++)
- 19. đóng gói các tệp xml bên trong dll, C#
- 20. Làm thế nào để phân tích tệp kết xuất từ tệp DLL Delphi?
- 21. Làm thế nào để sử dụng C# dll trong vC++?
- 22. Làm thế nào để sửa đổi một chức năng trong một biên dịch DLL
- 23. Làm thế nào để ẩn các chuỗi trong một exe hoặc một dll?
- 24. Làm thế nào để tải một dll C# trong python?
- 25. Làm thế nào để ngăn chặn DLL tiêm
- 26. Phân tích các tệp .exe/.dll (Windows PE) cho các bloats mã
- 27. Làm thế nào để sử dụng một lớp trong DLL?
- 28. Sử dụng các tệp DLL trong VBScript
- 29. Làm thế nào để xây dựng một giải pháp phòng thu trực quan 2010 thành một dll độc lập?
- 30. CreateProcess STATUS_DLL_NOT_FOUND - dll nào?
Theo dự đoán tốt nhất, nó có một phiên bản của tập DLL được đặt mặc định trừ khi tệp kê khai cho biết cách khác. – Powerlord
Tôi nghĩ rằng điều này thuộc về Super User, không phải SO. –
Tại sao? Nó có rất nhiều sự liên quan đến lập trình (như là câu chuyện gần đây /., Trong đó 90% độc giả không hiểu SxS là gì hoặc nó hoạt động như thế nào). –