2010-06-10 17 views
8

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?

+0

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

+0

@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. –

+0

@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

Trả lời

6

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ả.

http://msdn.microsoft.com/en-us/library/b61s44e8.aspx

+0

Đ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

2

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.

See this usage

Bạn có thể chặn thư. (/ s)

+0

[@Hao] (http://stackoverflow.com/users/55327/hao) - mặc dù câu trả lời thay thế của tôi, tôi đồng ý với Tim. –

+0

@AJ: vấn đề với một cách mù quáng regsvring chúng, nếu DLL là loại .NET, các regsvr32 phát ra một lỗi – Hao

+1

http://support.microsoft.com/kb/249873 - sử dụng cờ im lặng ... – Tim

5

Để 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).

+0

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

+0

@ [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). –

Các vấn đề liên quan