使用Compact Framework 3.5的wince应用程序中的资源已损坏



我正在维护一个在compact framework 3.5上开发的windows ce表单应用程序我正在努力解决的问题是,在windowsce6.0设备上运行的应用程序在工作几天后崩溃了。它提供了一个例外:

SerializationException 255 at Systems.Resources.ResourceReader.ParseMessageEnd() at
System.Resources.ResourceReader.LoadBitmap(Int 32 typeIndex) etc

我使用.Net Reflector分析了设备上运行的exe文件,发现一些资源已损坏,它们的值为:Invalid resource TypeCode '-1' and the type is System.BadImageFormatException, mscorlib, Veersion=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 whilst the non corrupted resources have Version=2.0.0.0

文件被破坏,版本发生变化,这真的很奇怪。我还在代码中发现了一个200ms的定时器,它可以永远运行,在这个定时器中还有一个导致ui滞后的代码:

if (Global.ParSotteraneiQuadro.typepompa == ClParSottQuadro.EnTipoPompa.PNEUM)
{
ImagesMOTORE[0] = Resources.pump_OFF;
ImagesMOTORE[1] = Resources.pump_OFF;
ImagesMOTORE[2] = Resources.pump_ON;
ImagesMOTORE[3] = Resources.pump_ON;
btPompa.ImageBack = Resources.pump_OFF;
btPompa.ImageFore = Resources.pump_ON;
MemImageMOTORE = new ClassMemImage(ImagesMOTORE);
ImagesTempWait[0] = Resources.anim12_230;
ImagesTempWait[1] = Resources.anim22_230;
ImagesTempWait[2] = Resources.anim32_230;
ImagesTempWait[3] = Resources.anim42_230;
ImagesTempWait[4] = Resources.sfondo_arancio; // arancione vuoto
ImagesTempWait[5] = Resources.sfondo_red; // rosso vuoto
ImagesTempWait[6] = Resources.warning_230;
ImagesTempWait[7] = Resources.ok_230;
ImagesTempWait[8] = Resources.eco_top;
ImagesTempWait[9] = Resources.abil_pompa_pump;
ImagesTempWait[10] = Resources.abil_24VOLT_sfumato;
ImagesTempWait[11] = Resources.ok_230_giallo;
MemImageWaitTemp = new ClassMemImage(ImagesTempWait);
}
else
{
ImagesMOTORE[0] = Resources.motor_OFF;
ImagesMOTORE[1] = Resources.motor_OFF;
ImagesMOTORE[2] = Resources.motor_ON;
ImagesMOTORE[3] = Resources.motor_ON;
btPompa.ImageBack = Resources.motor_OFF;
btPompa.ImageFore = Resources.motor_ON;
MemImageMOTORE = new ClassMemImage(ImagesMOTORE);
ImagesTempWait[0] = Resources.anim12_230;
ImagesTempWait[1] = Resources.anim22_230;
ImagesTempWait[2] = Resources.anim32_230;
ImagesTempWait[3] = Resources.anim42_230;
ImagesTempWait[4] = Resources.sfondo_arancio; // arancione vuoto
ImagesTempWait[5] = Resources.sfondo_red; // rosso vuoto
ImagesTempWait[6] = Resources.warning_230;
ImagesTempWait[7] = Resources.ok_230;
ImagesTempWait[8] = Resources.eco_top;
ImagesTempWait[9] = Resources.abil_pompa;
ImagesTempWait[10] = Resources.abil_24VOLT_sfumato;
ImagesTempWait[11] = Resources.ok_230_giallo;
MemImageWaitTemp = new ClassMemImage(ImagesTempWait);
}

有人面对过这样的事情吗?感谢您的帮助

IIRC资源加载在可写内存中,这意味着如果指针使用错误,应用程序可能会覆盖该数据。通常您不会在.NET中直接访问指针,但那些";Mem";课程可能需要更多的调查。只有在Global.ParSotteraneiQuadro.typepomba自上次检查以来发生变化的情况下,才应该完成所有的任务和分配。

插入时从外部存储自动运行:

"Compact Flash卡上的自动运行应用程序从Windows CE 3.0开始,当应用程序插入设备时,可以从Compact Flash存储卡运行应用程序。这允许应用程序从Compact Flash卡自动安装。要将应用程序设置为自动运行,必须将应用程序放在应用程序所针对CPU的特定文件夹中。文件夹名称基于调用GetSystemInfo返回的SYSTEM_INFO结构的dwProcessorType成员中返回的CPU编号。表3.7显示了可能的值及其相关常数。常数价值PROCESSOR_MIPS_R40004000处理器_日立_SH310003处理器_日立_ h3e10004处理器_日立_SH410005PROCESSOR_morola_821821处理器_SHx_SH3103处理器_SHx_SH4104处理器2577处理器_ rm7201824处理器_ rm8202080处理器ARM9202336处理器rm_7TDMI70001表3.7。处理器值和相关常量因此,如果您希望应用程序自动运行,并且该应用程序是为MIPS编译的,则应将应用程序重命名为autorun.exe,并将其放在名为\4000的文件夹中,例如\4000\autorun.exe。如果您的应用程序是为CEF(通用可执行文件格式(编译的,则应将autorun.exe文件放在名为\0的文件夹中,例如\0\autorun.exe。向应用程序autorun.exe传递命令行参数";安装";当插入紧凑型闪存卡时;卸载";当取出卡时。这允许您的autorun.exe应用程序在移除卡时自行卸载"〔摘自:Windows CE 3.0应用程序编程〕

最新更新