Ошибка «Нет диска» при использовании GDAL из C #/.NET

Я использую Tamas Szekeres сборки GDAL , включая привязки C #в настольном ГИС-приложении с использованием C #и.net 4.0

. Я включаю весь дистрибутив GDAL в подкаталог -моего исполняемого файла со следующей структурой папок:

\Plugins\GDAL
\Plugins\GDAL\gdal
\Plugins\GDAL\gdal-data
\Plugins\GDAL\proj

Мы используем EPSG :4326, и программное обеспечение построено с использованием 32-битной -битной цели, поскольку GDAL C #API использует p/invoke для 32-битных -битных библиотек (. ] можно попробовать 64-битную, так как Tamas предоставляет их, но пока не дошли руки до этого ).

Когда я запускаю свое приложение, я получаю следующую ошибку

enter image description here

Эта ошибка обычно возникает, когда программное обеспечение пытается получить доступ к устройству , которое больше не подключено, например к съемному диску. Невозможно «поймать» это исключение, потому что оно вызывает системный диалог.

После закрытия диалогового окна с помощью любой из кнопок программное обеспечение продолжает работать в соответствии с проектом.

Ошибка возникает при первом вызове следующего метода

OSGeo.OSR.CoordinateTransformation.TransformPoint(double[] inout);

Странные вещи:

  • Ошибка возникает на одном и пока только на одном компьютере ()
  • Я запускал это программное обеспечение на нескольких других компьютерах, как 32-битных, так и 64-битных, без проблем
  • Ошибка не возникает при первом запуске после компиляции библиотеки прокладок GDAL, которую я использую, она возникает только при каждом последующем запуске
  • это происходит независимо от выпуска или отладочной сборки
  • это происходит независимо от того, подключен отладчик или нет
  • это происходит независимо от того, включаю я или отключаю Gdal.UseExceptions или Osr.UseExceptions ();
  • отключение съемных дисков приводит к исчезновению ошибки.Это не то, что я считаю реальным решением, так как я не смогу попросить клиента сделать это.

Я пробовал следующее:

  • поймать ошибку
  • изменение каталогов GDAL и настроек среды
  • смена компьютеров и операционных систем :это сработало
  • безуспешно использовал SysInternals ProcMon для отслеживания открываемых файлов, все они кажутся существующими файлами
  • Я повторно -собрал рассматриваемый компьютер после отказа жесткого диска, но безрезультатно.
  • "чистка" реестра с помощью CCleaner
  • файлы в каталоге GDAL не изменяются при выполнении

Предположения

  • Ошибка происходит в неуправляемом коде
  • Во время инициализации GDAL некоторый путь ссылается на диск на компьютере, который больше не подключен .
  • Я также работаю над предположением, что это связано с ошибкой конфигурации компьютера

. Конфигурация

  • Windows 7 Профессиональная
  • Intel Core i7 920 @ 2,67 ГГц
  • 12,0 ГБ ОЗУ
  • 64 -бит ОС
  • Диск C :120 ГБ SSD с ОС, разработка (Visual Studio 10 )и т. д.
  • Диск D :1 ТБ WD 10 000k с данными, доступ к данным отсутствует.

Вопрос

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

14
задан Blue Toque 17 July 2012 в 04:35
поделиться