【发布时间】:2012-07-14 21:05:25
【问题描述】:
我正在使用 GDAL 的 Tamas Szekeres 构建,包括使用 C# 和 .net 4.0 的桌面 GIS 应用程序中的 C# 绑定
我将整个 GDAL 分发包包含在我的可执行文件的子目录中,其文件夹结构如下:
\Plugins\GDAL
\Plugins\GDAL\gdal
\Plugins\GDAL\gdal-data
\Plugins\GDAL\proj
我们正在使用 EPSG:4326,并且该软件是使用 32 位目标构建的,因为 GDAL C# API 使用 p/invoke 到 32 位库(可以尝试 64 位,因为 Tamas 提供了这些,还没有得到还没到)。
当我运行我的应用程序时,我收到以下错误
此错误通常发生在不再连接的软件tries to access a device(例如可移动驱动器)时。无法“捕捉”此异常,因为它会弹出一个系统对话框。
使用任何按钮关闭对话框后,软件将继续按设计执行。
第一次调用下面的方法时出现错误
OSGeo.OSR.CoordinateTransformation.TransformPoint(double[] inout);
奇怪的东西:
- 错误发生在一台计算机上(目前为止)
- 我已经在其他几台 32 位和 64 位计算机上运行该软件,没有任何问题
- 编译我正在使用的 GDAL shim 库后,第一次运行时不会发生错误,它只会在每次后续运行时发生
- 无论发布还是调试版本都会发生这种情况
- 无论是否附加调试器,都会发生这种情况
- 无论我打开还是关闭 Gdal.UseExceptions 或 Osr.UseExceptions(),它都会发生;
- 禁用可移动驱动器会导致错误消失。我认为这不是真正的解决方案,因为我无法要求客户这样做。
我尝试了以下方法:
- 发现错误
- 更改 GDAL 目录和环境设置
- 更改计算机和操作系统:这行得通
- 使用 SysInternals ProcMon 来跟踪正在打开的文件没有运气,它们似乎都是存在的文件
- 当硬盘驱动器发生故障时,我重新构建了有问题的计算机,但无济于事。
- 使用CCleaner“清理”注册表
- GDAL 目录中的文件在执行时保持不变
假设
- 非托管代码中发生错误
- 在 GDAL 初始化期间,某些路径指的是计算机上不再连接的驱动器。
- 我也在假设这仅限于计算机配置错误
配置
- Windows 7 专业版
- 英特尔酷睿 i7 920 @ 2,67GHz
- 12.0 GB 内存
- 64 位操作系统
- 驱动器 C:120 GB SSD,带操作系统、开发 (Visual Studio 10) 等
- 驱动器 D:1 TB WD 10,000k 有数据,未访问数据。
问题
我要么需要一个方向来捕获错误,要么需要一个工具或技术来让我找出导致它的原因。我不想发布软件,因为某些系统可能会有这种行为。
【问题讨论】:
-
更新1:根据下面的第一个答案,我查看了GDAL目录中的文件数,文件数稳定。更新 2:我接受了自己的建议,并使用设备管理器禁用了系统上的所有可移动设备。这“解决”了问题!这不是一个真正的解决方案,所以我将保留这个问题。如何追踪哪个软件正在访问哪个可移动设备?
-
可能是方法调用导致了异常,所以 Visual Studio 尝试加载库的原始源文件,这些文件可能是从 PC 上指向空驱动器的驱动器编译的?不过,您应该能够使用 ProcMon 看到这一点。
-
嘿!在这最后 8 小时内您需要任何帮助吗?让我们知道,因为这似乎有点像 PITA
-
大家好;我觉得我无法奖励赏金,因为所提供的解决方案都没有真正找到错误。优秀的想法;关于编写代码来点击按钮的方法很有创意,但绝对是一个可怕的骇人听闻的黑客行为。我将使用此处概述的算法让系统奖励一半的赏金:meta.stackexchange.com/questions/16065/…