У меня есть updater программа, вытянутые файлы с сервера смешал vb6 dll и .net DLLs в одном каталоге.
Как определить, является ли dll COM один? (таким образом, я могу вызвать regsvr32
к нему из updater программы)
Думаю, один из способов сделать это - попробовать загрузить файл с помощью System.Reflection.Assembly.LoadFile (). Если вы получили исключение BadImageFormatException, это недействительная сборка .NET. Возможно, есть более изящный способ сделать это, но он должен работать.
Чтобы сделать это формально, вы можете проинспектировать PE, чтобы узнать больше о том, какой тип материала экспортирует каждая dll. На MSDN есть довольно интересная статья, в которой рассказывается об этой структуре. Если вы понимаете структуру, вы можете определить связи с .Net (и, следовательно, отсутствие указания на чистую COM dll).
Почему бы просто не позвонить в регсвр всем им. Если они зарегистрируются, то хорошо, если нет - ничего страшного.
Хотя, наверное, лучше написать программу установки, которая будет знать, какие из них какие, и делать правильные действия для каждой.
EDIT
Если вы беспокоитесь о "выдаче ошибок", не волнуйтесь.
Вы можете подавлять сообщения. (/s)