Mam program aktualizujący, ściągnięte pliki z serwera mieszały biblioteki dll vb6 i .net dll w jednym katalogu. jak ustalić, czy dll jest COM? (Tak więc mogę wywołać regsvr32 do niego z programu aktualizacyjnego)Jak ustalić, czy DLL to COM lub .NET?
Odpowiedz
Myślę, że jednym ze sposobów, aby to zrobić, byłoby spróbować załadować plik z System.Reflection.Assembly.LoadFile(). Jeśli pojawi się wyjątek BadImageFormatException, nie jest to poprawny zestaw .NET. Prawdopodobnie jest to lepszy sposób, ale powinno to zadziałać.
Wydaje się, że trzeba dużo pracy, aby napisać instalator, który robi to zamiast dokładnego śledzenia, które biblioteki DLL muszą zostać zarejestrowane. Ale +1 i tak – Tim
Dlaczego nie wystarczy zadzwonić regsvr na wszystkie z nich. Jeśli się zarejestrują, to ok, jeśli nie, to nic wielkiego.
Najprawdopodobniej najlepiej jest napisać instalator, który ma wiedzę na temat tego, który z nich jest właściwy i który jest odpowiedni dla każdego.
EDIT
Jeśli martwisz się o "emitujących błędów", nie denerwować.
można stłumić wiadomości. (/ s)
Aby to zrobić, możesz sprawdzić PE, aby dowiedzieć się więcej na temat tego, jaki rodzaj materiałów eksportuje każdy dll. Jest a pretty interesting article on MSDN, który mówi o strukturze. Jeśli znasz konfigurację, możesz zidentyfikować łącza do .Net (a tym samym brak wskazujący czystą dll COM).
Dziś skończyły się głosy. Wrócę i zagłosuję na to. To dobra techniczna odpowiedź. – Tim
@ [Tim] (http://stackoverflow.com/users/26177/tim) - dziękuję :) To nie jest dla osób o słabym sercu, ale przy odrobinie wysiłku może zapewnić całkiem solidne rozwiązanie.Jeśli scenariusz jest czymś wyższym niż montaż, podejście to powinno być niezawodne (czytaj: nie zbyt wiele "zoptymalizowanych" PE do radzenia sobie). –
Dlaczego nie zrobić dobrze i zarejestrować te, które znasz, są serwerami COM i pomijać te, które nie są? Powinieneś mieć te informacje i możesz je zakodować w swoim instalatorze. – Tim
@Tim - Wydaje mi się, że może istnieć sytuacja, w której wydawcy kodu nie są tą samą organizacją co konsumenci - w przeciwnym razie zgadzam się - wyraźnie kontrolują proces. –
@AJ - to nadal nie znaczy, że nie można tego rozgryźć i przetestować. Chodzi mi o to, że jeśli jest to część procesu instalacji, powinieneś WIEDZIEĆ, co musi być zarejestrowane. Nie robienie tego jest niechlujne i nieprofesjonalne. Jest to prosty test, aby zrobić to wcześniej. Dlaczego chcesz dodać kod, gdy wszystko, co musisz zrobić, to wcześniej ustalić? – Tim