Windows mobile 应用程序崩溃,filesys.exe出错
如果您有一个应用程序(我们称之为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):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
[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…以防万一。