Я использую Tamas Szekeres строит GDAL включая привязки С# в настольном GIS-приложении с использованием С# и .net 4.0
Я включаю весь дистрибутив GDAL в подкаталог моего исполняемого файла со следующей структурой папок:
\Plugins\GDAL
\Plugins\GDAL\gdal
\Plugins\GDAL\gdal-data
\Plugins\GDAL\proj
Мы используем EPSG: 4326, а программное обеспечение построено с использованием 32-битной цели, поскольку API GDAL С# использует p/invoke для 32-битные библиотеки (можно попробовать 64 бит с тех пор, как Tamas предоставляет их, еще не добрались до него).
Когда я запускаю свое приложение, я получаю следующую ошибку:
Эта ошибка обычно возникает, когда программное обеспечение пытается получить доступ к устройству, которое больше не подключено, например съемный диск. Невозможно "поймать" это исключение, потому что оно выдает системный диалог.
После отклонения диалога с помощью любой из кнопок программное обеспечение продолжает выполняться в соответствии с запросом.
Ошибка возникает при первом вызове следующего метода
OSGeo.OSR.CoordinateTransformation.TransformPoint(double[] inout);
Странный материал:
- Ошибка возникает на одном, и только один компьютер (пока)
- Я запустил это программное обеспечение на нескольких других компьютерах без проблем 32 и 64 бит.
- Ошибка не возникает при первом запуске после компиляции библиотеки подгонки GDAL, которую я использую, она возникает только при каждом последующем прогоне
- это происходит независимо от выпуска или отладки сборки
- Это происходит независимо от того, подключен ли отладчик или нет
- Это происходит независимо от того, включаю ли я или нет Gdal.UseExceptions или Osr.UseExceptions();
- отключение съемных дисков приводит к исчезновению ошибки. Это не то, что я считаю реальным решением, поскольку я не смогу попросить клиента сделать это.
Я пробовал следующее:
- обнаружение ошибки
- изменение каталогов GDAL и настроек среды
- смена компьютеров и операционных систем: это сработало
- используется SysInternals ProcMon для отслеживания того, какие файлы открываются без везения, все они выглядят как файлы, которые существуют
- Я перекомпоновал компьютер, когда жесткий диск потерпел неудачу, но безрезультатно.
- "очистка" реестра с помощью CCleaner
- файлы в каталоге GDAL без изменений
Предположения
- Ошибка в неуправляемом коде
- Во время инициализации GDAL некоторый путь относится к диску на компьютере, который больше не привязан.
- Я также работаю над предположением, что это ограничивается ошибкой конфигурации компьютера
Конфигурация
- Windows 7 Pro
- Intel Core i7 920 @2,67 ГГц
- Оперативная память 12.0 ГБ
- 64-разрядная ОС
- Дисковод C: 120 ГБ SSD с ОС, разработка (Visual Studio 10) и т.д.
- Драйвер D: 1 ТБ WD 10,000k с данными, которые не доступны для данных.
Вопрос
Мне нужно либо направление, чтобы уловить ошибку, либо инструмент или метод, которые позволят мне выяснить, что вызывает его. Я не хочу выпускать программное обеспечение с возможностью того, что некоторые системы будут иметь такое поведение.