小编Blu*_*que的帖子

使用C#/ .NET中的GDAL时出现"No Disk"错误

我正在使用Tamas Szekeres构建的GDAL,包括使用C#和.net 4.0的桌面GIS应用程序中的C#绑定

我将整个GDAL发行版包含在我的可执行文件的子目录中,具有以下文件夹结构:

\Plugins\GDAL
\Plugins\GDAL\gdal
\Plugins\GDAL\gdal-data
\Plugins\GDAL\proj
Run Code Online (Sandbox Code Playgroud)

我们正在使用EPSG:4326,并且该软件是使用32位目标构建的,因为GDAL C#API正在使用p/invoke到32位库(可以尝试64位,因为Tamas提供这些,没有得到它然而).

当我运行我的应用程序时,我收到以下错误

在此输入图像描述

当软件尝试访问不再连接的设备(例如可移动驱动器)时,通常会发生此错误.无法"捕获"此异常,因为它会弹出一个系统对话框.

在使用任何按钮解除对话框后,软件继续按设计执行.

第一次调用以下方法时会发生错误

OSGeo.OSR.CoordinateTransformation.TransformPoint(double[] inout);
Run Code Online (Sandbox Code Playgroud)

奇怪的东西:

  • 错误发生在一台计算机上(目前为止)
  • 我已经在其他几台32位和64位计算机上运行该软件而没有任何问题
  • 编译我正在使用的GDAL填充程序库后第一次运行时错误不会出现,它只会在每次后续运行时发生
  • 无论发布版本还是调试版本,它都会发生
  • 无论调试器是否附加,都会发生这种情况
  • 无论我打开还是关闭Gdal.UseExceptions或Osr.UseExceptions(),它都会发生;
  • 禁用可移动驱动器会导致错误消失.这不是我认为真正的解决方案,因为我无法要求客户这样做.

我尝试过以下方法:

  • 抓住错误
  • 更改GDAL目录和环境设置
  • 改变计算机和操作系统:这很有效
  • 使用SysInternals ProcMon跟踪正在打开的文件没有运气,它们似乎都是存在的文件
  • 当硬盘驱动器发生故障时,我重新构建了有问题的计算机,但无济于事.
  • 使用CCleaner "清理"注册表
  • GDAL目录中的文件在执行时保持不变

假设

  • 在非托管代码中发生错误
  • 在GDAL初始化期间,某些路径指的是计算机上不再连接的驱动器.
  • 我也在假设这仅限于计算机配置错误

组态

  • Windows 7专业版
  • 英特尔酷睿i7 920 @ 2,67GHz
  • 12.0 GB RAM
  • 64位操作系统
  • 驱动器C:120 GB SSD,带OS,开发(Visual Studio 10)等
  • 驱动器D:1 TB WD 10,000k带有数据,无法访问数据.

问题

我要么需要一个方向来捕获错误,要么是一个工具或技术,可以让我找出导致它的原因.我不想发布软件,因为某些系统可能会出现这种情况.

.net c# windows gis gdal

14
推荐指数
1
解决办法
751
查看次数

标签 统计

.net ×1

c# ×1

gdal ×1

gis ×1

windows ×1