Как я могу в программе определить, управляется ли DLL или неуправляемым кодом? Мы используем this code, чтобы убедиться, что все наши управляемые DLL - это MSIL. Но он генерирует исключение из неуправляемых DLL, поэтому мне нужно сначала проверить, управляется ли DLL.Как я могу программным образом определить, управляется ли DLL или неуправляемым?
ответ
Простейшим вариантом, скорее всего, будет просто попытаться открыть файл так, как вы есть, и поймать исключение. Любая неуправляемая сборка выдает исключение на Assembly.LoadFrom
.
Однако, если вы хотите определить это более строго, вам нужно будет изучить заголовок PE для получения соответствующей информации самостоятельно. Это article describes the process в деталях, но для этого требуется проверка структуры заголовка PE DLL в IMAGE_OPTIONAL_HEADER.
Они уверены, что не делают так просто :) Спасибо –
@DavidThielen Нет - к сожалению, нет простого API для этого , даже на родной стороне. –
@DavidThielen, прежде чем вы начнете кодировать способ сделать это, подумайте о времени. Если обработка исключения добавляет, возможно, 2 мс к времени сборки вместо того, чтобы писать способ разбора PE-заголовка, просто делайте небольшую математику, если '(время, затраченное на запись обработчика/разницу во времени между обработкой исключений и обнаружением) <количество построений в жизнь программы не стоит делать. –
- 1. Как я могу программным образом определить, произошло ли событие touchUpInside?
- 2. Как я могу программным образом определить тип моего процессора?
- 3. Как я могу программным образом определить типы аутентификации ssh?
- 4. Как я могу программным образом определить, установлен ли установленный SQL Server 32 или 64 бит
- 5. Управляется неуправляемым кодом, значение DWORD для LPVOID
- 6. Управляется неуправляемым обратным вызовом с управляемыми параметрами?
- 7. Как я могу программным образом определить, есть ли на компьютере-клиенте Microsoft.Jet.OLEDB.4.0 как действительный поставщик?
- 8. Как я могу программным образом определить, имеет ли файл eps градиент?
- 9. Как я могу программным образом определить, установлен ли Visual C++ Runtime 8.0?
- 10. Как я могу программным образом определить, заблокирована ли моя рабочая станция?
- 11. .NET: Как определить программным образом, было ли скомпилировано .NET-приложение?
- 12. Как я могу программным образом определить, есть ли права на запись с использованием C# в .Net?
- 13. Как я могу программным образом определить, выбрана ли хранимая процедура из другой базы данных?
- 14. Как я могу программным образом определить, запрещает ли сайт очищать экран?
- 15. Как я могу программным образом определить, было ли запущено приложение OSX из каталога приложений?
- 16. Как определить, управляется ли файл perforce?
- 17. Android: Как я могу программным образом включить телефон пользователя?
- 18. Как я могу программным образом определить, отображается ли какой-либо текст или переполнен в документе InDesign с использованием ExtendScript?
- 19. Как я могу программным образом определить, является ли URL-адрес универсальной ссылкой или просто обычным веб-адресом?
- 20. Как я могу определить, одинаковы ли две .NET DLL?
- 21. Как я могу программным образом взаимодействовать с видеоиграми GUI
- 22. Как я могу программным образом определить элементы XML, которые можно вставить дальше?
- 23. Есть ли способ определить, что соединение управляется?
- 24. Как я могу программным образом определить, какой класс/модуль определяет метод, который вызывается?
- 25. Как определить, является ли dll COM-dll
- 26. Как я могу программным образом определить, что приложение для Mac имеет «пляжный мяч»?
- 27. Как я могу программным образом перечислить рабочие процессы IIS?
- 28. Как я могу программным образом получить значение поля интеграции «интеграция»
- 29. Как я могу программным образом задать URL-адрес политики?
- 30. Как я могу программным образом вытащить живую плитку по умолчанию?
Как часто вы делаете это? Иногда вам просто нужно обрабатывать исключение и двигаться дальше, я не знаю, есть ли простой (исключительный) способ решить эту проблему. –
@ScottChamberlain Он находится в процессе сборки, поэтому не большой удар по времени. Мне просто не нравятся исключения, когда код работает как ожидалось. –
@DavidThielen Есть способы сделать это, но это немного сложно, так как нет прямого API. Лично, поймать исключение - это тот подход, который я бы взял, потому что он просто легкий и чистый ... –