Windows mobile 应用程序崩溃,filesys.exe出错

Windows mobile 应用程序崩溃,filesys.exe出错,windows-mobile,compact-framework,sql-server-ce,emulation,merge-replication,Windows Mobile,Compact Framework,Sql Server Ce,Emulation,Merge Replication,如果您有一个应用程序(我们称之为A,CF 3.5),它调用同一目录中的另一个应用程序(B,CF 3.5)来委派一些工作(下载文件)。只要SQL Server CE程序集(3.5 SP2)未由应用程序A加载,这项功能就可以正常工作。如果应用程序A加载SQL Server CE程序集,应用程序B将因随机文件系统错误(例如无法加载的程序集)和filesys.exe中的大量异常而崩溃。以下是Windows Mobile生成的错误报告的内容: 铲斗参数 EvntType:WinCE50lbExceptio

如果您有一个应用程序(我们称之为A,CF 3.5),它调用同一目录中的另一个应用程序(B,CF 3.5)来委派一些工作(下载文件)。只要SQL Server CE程序集(3.5 SP2)未由应用程序A加载,这项功能就可以正常工作。如果应用程序A加载SQL Server CE程序集,应用程序B将因随机文件系统错误(例如无法加载的程序集)和filesys.exe中的大量异常而崩溃。以下是Windows Mobile生成的错误报告的内容:

铲斗参数 EvntType:WinCE50lbException

AppName:filesys.exe

应用版本:5.2.0.0

应用邮票:29ccdda8

ModName: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、sqlceme35.dll、sqlceme35.dll、sqlceca35.dll、sqlcecompact35.dll):

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

更新

在删除测试的OpenNETCF引用后,我得到了以下异常:

无法读取配置文件“…\some.config”:UnauthorizedAccessException


这是一个由配置管理器包装的异常(我无法调试它,因为它发生在B中)。应用程序A读取该文件,但在反序列化后立即关闭并释放它

看起来您也在使用其中一种工具

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

编辑:在读取或写入
some.config
文件时,请确保在其周围使用锁,以防止其他进程同时尝试访问此资源

private object objSomeConfig = new Object();

public string GetSomeConfig() {
  string data = null;
  lock (objSomeConfig) {
    data = ....; // fill in your code
  }
  return data;
}

您是如何让CF 2.0应用程序使用SQLCE 3.5程序集的?顺便说一下,SQLCE 3.5库需要使用CF 3.5。@在hm中,我可以将它们与CF 2.0库一起引用和使用。但这并不重要,错误也发生在我们的CF3.5客户机上。我相应地改变了问题。谢谢你的提示。如果这只发生在电动车里,你就幸运了。我也在设备上见过这种事情。无论如何,为什么要在SQLCE libs上使用LoadLibrary?
LoadLibrary
用于直接从DLL的部署目录加载DLL。这可以是应用程序所在的同一目录,也可以是任何其他目录(例如SQLCE的安装路径)。我将查看这段代码,以检查这是否是故障的原因。我并不是说这是问题所在,但应该没有必要在.NET程序集上加载库。改用Assembly.LoadFrom。为了测试,我删除了所有引用OpenNETCF的代码,但问题仍然存在。但一般来说,我们的解决方案会释放所有资源。关于此:
无法读取配置文件“…\some.config”:UnauthorizedAccessException
查看A和B如何从
some.config
读取。我的猜测是,一个或多个用户正在试图同时阅读。不过,只是猜测而已。他们都是在创业时读的。当A启动B时,A已经读取了配置并释放了资源。您可能需要使用A…以防万一。