Как определить, является ли DLL COM или .NET? - PullRequest
8 голосов
/ 10 июня 2010

У меня есть программа обновления, вытащенные файлы с сервера смешали библиотеки DLL vb6 и .net в одном каталоге.

Как определить, является ли dll COM-файлом? (чтобы я мог вызвать regsvr32 к нему из программы обновления)

Ответы [ 3 ]

6 голосов
/ 10 июня 2010

Я думаю, что один из способов сделать это - загрузить файл с помощью System.Reflection.Assembly.LoadFile (). Если вы получили исключение BadImageFormatException, это не допустимая сборка .NET. Вероятно, есть более аккуратный способ сделать это, но это должно сработать.

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

5 голосов
/ 10 июня 2010

Чтобы сделать это формально, вы можете проверить PE, чтобы узнать больше о том, какие вещи экспортирует каждая dll. На MSDN есть довольно интересная статья , в которой рассказывается о структуре. Если вы понимаете настройку, вы можете определить ссылки на .Net (и, следовательно, отсутствие указывает на чистый COM DLL).

3 голосов
/ 10 июня 2010

Почему бы просто не вызвать regsvr для всех из них.Если они зарегистрируются, тогда хорошо, если не большое дело.

Вероятно, лучше написать программу установки, которая знает, какие из них подходят, и которая делает правильные действия для каждого.

РЕДАКТИРОВАТЬ

Если вы беспокоитесь о"испуская ошибки", не волнуйтесь.

Смотрите это использование

Вы можете подавлять сообщения.(/ с)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...