如果有一个应用程序(我们称之为A,CF 3.5),它在同一目录中调用另一个应用程序(B,CF 3.5)来委派一些工作(下载文件)。这很好,只要应用程序A没有加载SQL Server CE程序集(3.5 SP2)。如果是,应用程序B将崩溃,随机文件系统错误(例如无法加载的程序集)和许多例外在filesys.exe中。以下是Windows Mobile生成的错误报告的内容:
水桶参数
EvntType:WinCE50lbException
AppName:filesys.exe
AppVer:5.2.0.0
AppStamp:29ccdda8
ModName:vcefsd.dll
ModVer:5.2.0.0
ModStamp:52652c34
偏移量:000017a0
OwnName:B.exe
OwnVer:1.0.0.0
OwnStamp: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读取该文件但在反序列化后立即关闭并释放它。
答案 0 :(得分:0)
您似乎也在使用其中一个OpenNETCF工具。
您是否已根据需要确认是否正在处理这些组件?
编辑:在读取或写入some.config
文件时,请务必使用锁定来防止其他进程同时尝试访问此资源。
private object objSomeConfig = new Object();
public string GetSomeConfig() {
string data = null;
lock (objSomeConfig) {
data = ....; // fill in your code
}
return data;
}