0

同じディレクトリ内で別のアプリケーション (B、CF 3.5 も同様) を呼び出して作業 (ファイルのダウンロード) を委任するアプリケーション (A、CF 3.5 と呼びましょう) があるとします。SQL Server CE アセンブリ (3.5 SP2) がアプリケーション A によってロードされていない限り、これはうまく機能します。ロードされている場合、アプリケーション B はランダムなファイル システム エラー (たとえば、アセンブリをロードできない) と多くの例外でクラッシュします。 filesys.exeで。Windows Mobile によって生成されたエラー レポートの内容は次のとおりです。

バケット パラメータ

EvntType: WinCE50lbException

アプリ名: filesys.exe

AppVer: 5.2.0.0

アプリスタンプ: 29ccdda8

ModName: vcefsd.dll

バージョン: 5.2.0.0

Modスタンプ: 52652c34

オフセット: 000017a0

所有者名: B.exe

所有バージョン: 1.0.0.0

所有スタンプ: 5003c932

このエラーは、デバッグが終了し、両方のアプリケーションが実行されなくなった後でも数回発生します。アプリケーション B 自体で発生するエラーの例:

ファイルまたはアセンブリ名 'OpenNETCF.Drawing, Version=2.2.0.0, Culture=neutral, PublicKeyToken=...' またはその依存関係の 1 つが見つかりませんでした。

アセンブリ名は時々変更されます (CF 3.5 アセンブリの場合もあります)。エラーはエミュレーターで (常に) 発生しますが、実際のデバイスでは発生しません。アプリケーション A が作業を B に委任する代わりにファイルをダウンロードしている場合、エラーは発生しません。

エミュレータのメモリ カード ドライバがこのエラーの原因であると思われますが、これ以上問題をデバッグする方法がわかりません。

注:アプリケーション A は、次の API 呼び出しを使用して、ローカルに配置された SQL CE ライブラリ (sqlceoledb35.dll、sqlcese35.dll、sqlceqp35.dll、sqlceme35.dll、sqlceca35.dll、sqlcecompact35.dll) をロードします。

[DllImport("coredll.dll")]
private static extern IntPtr LoadLibrary(string fileName);

アップデート

テストのために OpenNETCF 参照を削除した後、次の例外が発生しました。

構成ファイル '...\some.config' を読み取れません: UnauthorizedAccessException

これは、構成マネージャーによってラップされた例外です (B で発生するため、デバッグできません)。アプリケーション A はそのファイルを読み取りますが、逆シリアル化の直後に閉じて解放します。

4

1 に答える 1

0

OpenNETCFツールの 1 つも使用しているようです。

これらのコンポーネントを必要に応じて廃棄していることを確認しましたか?

EDIT:ファイルを読み書きするときsome.configは、他のプロセスが同時にこのリソースにアクセスしようとするのを防ぐために、必ずロックを使用してください。

private object objSomeConfig = new Object();

public string GetSomeConfig() {
  string data = null;
  lock (objSomeConfig) {
    data = ....; // fill in your code
  }
  return data;
}
于 2012-07-16T18:30:35.123 に答える