私は、C# および .net 4.0 を使用するデスクトップ GIS アプリケーションで、C# バインディングを含むGDALのTamas Szekeresビルドを使用しています。
次のフォルダー構造を持つ実行可能ファイルのサブディレクトリに、GDAL ディストリビューション全体を含めています。
\Plugins\GDAL
\Plugins\GDAL\gdal
\Plugins\GDAL\gdal-data
\Plugins\GDAL\proj
EPSG:4326 を使用しており、GDAL C# API が 32 ビット ライブラリに対してp/invokeを使用しているため、ソフトウェアは 32 ビット ターゲットを使用してビルドされています (Tamas がこれらを提供しているため、64 ビットを試すことができますが、まだ試していません)。まだ)。
アプリケーションを実行すると、次のエラーが表示されます
このエラーは通常、リムーバブル ドライブなど、接続されていないデバイスにソフトウェアがアクセスしようとしたときに発生します。システム ダイアログがポップアップするため、この例外を「キャッチ」することはできません。
いずれかのボタンを使用してダイアログを閉じた後、ソフトウェアは設計どおりに実行を続けます。
次のメソッドを初めて呼び出すと、エラーが発生します
OSGeo.OSR.CoordinateTransformation.TransformPoint(double[] inout);
奇妙なもの:
- エラーは1台のコンピューターでのみ発生します(これまでのところ)
- このソフトウェアを、32ビットと64ビットの両方の他のいくつかのコンピューターで問題なく実行しました
- 私が使用しているGDAL shimライブラリをコンパイルした後の最初の実行ではエラーは発生しません。その後の各実行でのみ発生します
- リリースやデバッグビルドに関係なく発生します
- デバッガーが接続されているかどうかに関係なく発生します
- Gdal.UseExceptions または Osr.UseExceptions(); をオンまたはオフにするかどうかに関係なく発生します。
- リムーバブル ドライブを無効にすると、バグが消えます。これは、お客様に依頼することができないため、実際の解決策とは考えていません。
私は次のことを試しました:
- エラーをキャッチする
- GDAL ディレクトリと環境設定の変更
- コンピューターとオペレーティング システムの変更: これは機能しました
- SysInternals ProcMon を使用して、開かれているファイルを追跡しましたが、それらはすべて存在するファイルのようです
- ハードドライブが故障したときに問題のコンピューターを再構築しましたが、役に立ちませんでした。
- CCleanerを使用してレジストリを「クリーニング」する
- GDAL ディレクトリ内のファイルは実行時に変更されません
仮定
- アンマネージ コードでエラーが発生しています
- GDAL の初期化中に、一部のパスが接続されていないコンピューター上のドライブを参照しています。
- これはコンピューターの構成エラーに限定されているという仮定にも取り組んでいます
構成
- ウィンドウズ 7 プロ
- インテル コア i7 920 @ 2,67GHz
- 12.0GBのRAM
- 64 ビット OS
- ドライブ C: OS、開発 (Visual Studio 10) などを搭載した 120 GB SSD
- ドライブ D: 1 TB WD 10,000k、データあり、データへのアクセスなし。
質問
エラーをトラップするための指示、またはエラーの原因を突き止めるためのツールまたはテクニックが必要です。一部のシステムでこの動作が発生する可能性があるソフトウェアをリリースしたくありません。