У меня есть программа обновления, вытащенные файлы с сервера имеют смешанную dll vb6 и .net dll в одном каталоге. как определить, является ли DLL COM? (так что я могу вызвать regsvr32 к нему из программы обновления)Как определить, является ли DLL COM или .NET?
ответ
Я предполагаю, что один из способов сделать это - попробовать загрузить файл с помощью System.Reflection.Assembly.LoadFile(). Если вы получаете исключение BadImageFormatException, это не допустимая сборка .NET. Вероятно, есть более простой способ сделать это, но это должно сработать.
Кажется, что большая работа заключается в том, чтобы написать установщик, который делает это, а не тщательно отслеживать, какие DLL должны быть зарегистрированы. Но +1 в любом случае – Tim
Почему бы просто не назвать REGSVR на всех из них. Если они регистрируются, тогда это нормально, если не будет большой сделки.
Возможно, лучше всего написать инсталлятор, обладающий знаниями о том, какие из них являются правильными для каждого.
EDIT
Если вы беспокоитесь о "излучающих ошибках", не волнуйтесь.
Вы можете подавить сообщения. (/ s)
Чтобы сделать это официально, вы можете проверить PE, чтобы узнать больше о том, какие типы материалов каждая dll экспортирует. Существует a pretty interesting article on MSDN, который рассказывает о структуре. Если вы понимаете настройку, вы можете идентифицировать ссылки на .Net (и, следовательно, недостаток, указывающий чистую COM-библиотеку).
Сегодня у меня кончились голоса. Я вернусь и проголосую за это. Это хороший технический ответ. – Tim
@ [Tim] (http://stackoverflow.com/users/26177/tim) - спасибо :) Это не для слабонервных, но с небольшим усилием оно может обеспечить довольно прочное решение.Если сценарий является чем-то более высоким, чем сборка, этот подход должен быть надежным (читайте: не слишком много «оптимизированных» PE для решения). –
- 1. Как определить, является ли dll COM-dll
- 2. Как определить тип dll? (COM, .NET, WIN32)
- 3. Как определить, является ли DLL совместимой?
- 4. .NET: Как определить, является ли объект COM-объектом?
- 5. Программно определить, установлена ли библиотека COM (.DLL)
- 6. Как определить, является ли .NET dll законным для Microsoft?
- 7. Как определить, является ли .NET DLL межсетевой сборкой?
- 8. Как проверить, если DLL является COM-компонент или нормальный длл
- 9. .NET - Как определить, является ли DLL 32-разрядной или 64-разрядной версией этой DLL
- 10. Настройка Inno Как определить, является ли файл сборкой .NET
- 11. Как определить, является ли COM-порт виртуальным или нет?
- 12. Как проверить, является ли PE-файл (DLL, EXE) COM-компонентом?
- 13. Замените родной C++ COM .dll на .NET COM .dll
- 14. Как определить, является ли файл EXE или DLL?
- 15. Определить разницу между COM и .NET DLL в Powershell
- 16. Невозможно зарегистрировать .net COM DLL
- 17. Как система определяет, является ли данная DLL .NET DLL?
- 18. Как программа COM обнаруживает .NET DLL, зарегистрированную для COM-взаимодействия?
- 19. Является ли замена .NET для COM?
- 20. Является ли .NET «все COM под ним»?
- 21. Является ли .NET Core совместимым с COM?
- 22. Как определить, является ли приложение .NET 32 или 64 бит?
- 23. Как заменить VB6 Com + DLL на .NET
- 24. .NET: Как определить, является ли тип допустимым?
- 25. C# .Net Обертка для COM Dll
- 26. Вставить родную DLL или сборку .NET в COM
- 27. Развертывание DLL .NET COM, получение ошибки (0x80070002)
- 28. Сделать ящик .net dll com явно видимым
- 29. Передача типов .NET со COM DLL
- 30. Перемещение ECDSA из COM DLL в .NET
Почему бы вам не сделать правильные вещи и не зарегистрировать те, которые, как вы знаете, являются серверами COM, и пропустить те, которые нет? У вас должна быть эта информация, и вы можете ее закодировать в своем установщике. – Tim
@Tim - Я предполагаю, что может существовать ситуация, когда издатели кода не являются той же организацией, что и потребители, иначе я согласен - явным образом контролирую процесс. –
@ AJ - это все еще не означает, что вы не можете понять это и проверить. Я хочу сказать, что если это часть процесса установки, вы должны ЗНАТЬ, что нужно зарегистрировать. Не делать этого небрежно и непрофессионально. Это простой тест, чтобы сделать это заранее. Почему вы хотите добавить код, когда все, что вам нужно сделать, определить заранее? – Tim