tôi có chương trình cập nhật, tệp được kéo từ máy chủ có dll vb6 hỗn hợp và dll .net trong một thư mục. làm thế nào để xác định nếu một dll là một COM? (vì vậy tôi có thể gọi regsvr32 cho nó từ chương trình cập nhật)Làm thế nào để xác định nếu DLL là COM hoặc .NET?
Trả lời
Tôi đoán một cách để làm điều đó là thử tải tệp bằng System.Reflection.Assembly.LoadFile(). Nếu bạn nhận được BadImageFormatException, nó không phải là một phiên bản .NET hợp lệ. Có lẽ có một cách để làm điều này, nhưng điều này sẽ hiệu quả.
Điều này có vẻ như rất nhiều công việc để viết một trình cài đặt thực hiện điều này thay vì cẩn thận theo dõi các DLL cần phải được đăng ký. Nhưng +1 anyway – Tim
Tại sao không chỉ gọi regsvr trên tất cả chúng. Nếu họ đăng ký thì ok, nếu không phải là không lớn.
Có lẽ tốt nhất là nên viết trình cài đặt có kiến thức về trình cài đặt nào và thực hiện điều gì phù hợp với từng trình cài đặt.
EDIT
Nếu bạn lo lắng về "phát ra lỗi", đừng băn khoăn.
Bạn có thể chặn thư. (/ s)
Để làm điều này một cách chính thức, bạn có thể kiểm tra PE để tìm hiểu thêm về loại công cụ mà mỗi dll sẽ xuất. Có a pretty interesting article on MSDN nói về cấu trúc. Nếu bạn hiểu được thiết lập, bạn có thể xác định các liên kết đến .Net (và do đó thiếu chỉ ra một dll COM thuần túy).
Tôi đã hết phiếu bầu hôm nay. Tôi sẽ trở lại và bỏ phiếu này. Đó là một câu trả lời kỹ thuật tốt. – Tim
@ [Tim] (http://stackoverflow.com/users/26177/tim) - cảm ơn :) Điều này không dành cho những người yếu tim, nhưng với một chút nỗ lực nó có thể cung cấp một giải pháp khá vững chắc.Nếu kịch bản là bất cứ điều gì cao hơn so với lắp ráp phương pháp này nên được đáng tin cậy (đọc: không quá nhiều "tối ưu hóa" của PE để đối phó với). –
- 1. Làm thế nào để sử dụng Đăng ký miễn phí COM dll trong dot net
- 2. Làm cách nào để phát hiện loại tệp dll? (COM, .NET, WIN32)
- 3. Đăng ký một NET COM DLL trong Wix Install
- 4. Lực lượng .NET interop sử dụng COM DLL cục bộ
- 5. .NET - Làm thế nào để gỡ lỗi một DLL?
- 6. com + thay thế trong .net?
- 7. Làm thế nào để xác định xem một loại .NET là một cấu trúc tùy chỉnh?
- 8. Làm thế nào để xác định nếu một số nguyên nhất định là trong một Enum cụ thể?
- 9. Đặt thuộc tính mặc định là 0 nếu để trống hoặc nếu không xác thực số
- 10. Làm thế nào để sử dụng COM dll trong chương trình C++ của tôi
- 11. Làm thế nào để xác định xem một ổ đĩa là ảo hoặc vật lý
- 12. Làm thế nào để gọi hàm COM DLL (trong VC++) từ ứng dụng VC++ .EXE?
- 13. đăng ký com dll trong wix
- 14. Làm thế nào để xác định xem đó là ngày hay đêm trong javascript hoặc jquery?
- 15. Làm cách nào để tạo một .dll được tạo bằng IKVM com?
- 16. Làm thế nào để bạn tạo một DLL COM trong Visual Studio 2008?
- 17. Làm thế nào để xác định nếu MethodInfo là một ghi đè của phương pháp cơ sở
- 18. Làm thế nào để biết một tập tin là một EXE hoặc một DLL?
- 19. Làm thế nào để xác định xem một khóa là một chữ cái hoặc số?
- 20. Làm thế nào để kiểm tra xem một biến hoặc đối tượng là không xác định?
- 21. Làm thế nào để xác định một hằng số là một byte hoặc ngắn?
- 22. Lập trình xác định xem thư viện COM (.DLL) có được cài đặt
- 23. Phát hiện nếu loại đối tượng là loại được xác định bởi .NET Framework
- 24. Làm thế nào để xác định một cửa sổ thực thi DLL phụ thuộc programatically?
- 25. Làm thế nào để nhúng .tlb dưới dạng tệp tài nguyên vào .NET Assembly DLL?
- 26. Làm thế nào để gọi một DLL .NET từ một tiến trình Win32?
- 27. Làm thế nào để xác định xem một DLL có yêu cầu Full .NET 4 hay chỉ là Hồ sơ khách hàng
- 28. Làm cách nào để kiểm tra xem một dll COM được đăng ký trong C#
- 29. C# + COM Interop, xác định phát hành
- 30. Xác định nguồn gốc của một DLL
Tại sao không làm điều đúng và đăng ký những người bạn biết là máy chủ COM và bỏ qua những người không? Bạn nên có thông tin đó và bạn có thể mã nó trong trình cài đặt của bạn. – Tim
@Tim - Tôi đoán có thể có một tình huống mà các nhà xuất bản của mã không phải là tổ chức giống như người tiêu dùng - nếu không tôi đồng ý - kiểm soát quá trình một cách rõ ràng. –
@AJ - mà vẫn không có nghĩa là người ta không thể tìm ra và kiểm tra nó. Quan điểm của tôi là nếu nó là một phần của quá trình cài đặt của bạn, bạn nên BIẾT những gì đã được đăng ký. Không làm như vậy là cẩu thả và không chuyên nghiệp. Đây là một thử nghiệm đơn giản để làm điều đó trước. Tại sao bạn muốn thêm mã khi tất cả những gì bạn cần làm là xác định trước? – Tim