gpt4 book ai didi

c# - 从 C#/.NET 使用 GDAL 时出现 "No Disk"错误

转载 作者:可可西里 更新时间:2023-11-01 12:28:03 24 4
gpt4 key购买 nike

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

我将整个 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

此错误通常发生在软件 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 包含数据,未访问数据。

问题

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

最佳答案

我没有使用这个库的经验,但也许一些新鲜的眼光会给你带来灵感......

首先,问题写得好!显然这个问题真的难倒你了...

关于重建后未发生的错误的注释尖叫:此库运行后是否在其二进制目录中生成某种状态文件?如果是这样,它可能会将不正确的路径信息保存到该“配置”文件中,这是一种加速其下一次启动的错误尝试。

也许扫描此目录以查找“全新构建”和“首次运行”之间的变化?

至少您可能会找到一个可以在关机时清理的文件以避免此警报...

HTH

关于c# - 从 C#/.NET 使用 GDAL 时出现 "No Disk"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11487390/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com