0

如果有一个应用程序(我们称之为 A,CF 3.5)在同一目录中调用另一个应用程序(B,CF 3.5)来委派一些工作(下载文件)。只要应用程序 A 不加载 SQL Server CE 程序集(3.5 SP2),这就会很好地工作。如果是,应用程序 B 将因随机文件系统错误(例如无法加载的程序集)和许多异常而崩溃在文件sys.exe 中。以下是 Windows Mobile 生成的错误报告的内容:

桶参数

事件类型:WinCE50lbException

应用名称:filesys.exe

应用程序版本:5.2.0.0

AppStamp:29ccdda8

模组名称:vcefsd.dll

版本:5.2.0.0

模组邮票:52652c34

偏移量:000017a0

自己的名字:B.exe

拥有版本:1.0.0.0

自己的邮票:5003c932

即使在调试结束并且两个应用程序都不再运行后,此错误也会发生多次。应用程序 B 本身发生的错误示例:

找不到文件或程序集名称“OpenNETCF.Drawing,Version=2.2.0.0,Culture=neutral,PublicKeyToken=...”或其依赖项之一。

程序集名称会不时更改(也可以是 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工具。

您是否已确认您正在根据需要处理这些组件?

编辑:读取或写入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 回答