gpt4 book ai didi

compact-framework - Windows CE 在重置时删除 .NET CF

转载 作者:行者123 更新时间:2023-12-04 06:01:18 24 4
gpt4 key购买 nike

我正在为专有的 Windows CE 4.2 设备编写 C# 应用程序(我没有规范或几乎任何其他信息。我可以访问文件系统,基本上就是这样。)
我也无法从原始制造商那里获得支持。
现在,我可以很好地安装 .NET Compact 框架,并且一切正常。但每隔一段时间,当设备重置时,它会删除框架、GAC 以及与之相关的所有内容。
我知道这不仅仅是恢复出厂默认设置的硬重置,因为:

  • 它会记住注册表设置(如果我再次尝试安装,它说框架已经安装,并询问我是否要重新安装。很明显,注册表项仍然存在)
  • 即使我将框架安装到可移动闪存卡上,文件也会被删除。 (然而,存储卡上的其他文件被保留)

  • 我知道没什么可做的,但也许某些 Windows CE 专家能够告诉我为什么会发生这种情况,以及是否有一些理智的方法可以避免这种情况。我不太了解 Windows CE,所以就我所知,这可能是完全标准的行为。
    就此而言,有关如何自己进一步解决此问题的任何建议?目前,我能看到的最佳解决方案是在每次启动时简单地重新安装所有内容,但这似乎有点笨拙。
    编辑:
    重置后,文件系统根目录中的 GACLOG.TXT 包含

    CGACUTIL: Initializing 12/08/2008

    20:43:57.000 CGACUTIL: Initialized

    12/08/2008 20:43:57.000 CGACUTIL:

    Removing Microsoft .NET CF 3.5.GAC

    12/08/2008 20:43:57.000 CGACUTIL: Done

    12/08/2008 20:43:57.000 CGACUTIL:

    Exiting 12/08/2008 20:43:57.000


    所以是的,它肯定会删除 GAC。为什么,以及如何阻止它?

    最佳答案

    您在此处看到的一些 Windows CE 和 CF 行为为您提供了这种行为。不幸的是,没有真正好的解决方案,但我至少可以给你一些指导。

  • Windows CE 存储当前对象存储,包括文件系统中的文件,而不是专门存储在 RAM 中的持久存储上。这包括添加到\Windows 文件夹中的任何文件和/或文件夹(这对您来说很关键)。当设备断电时——通常是在软复位或硬复位中,这些数据会丢失。
  • CE 注册表可以(并且可能在您的设备上)存储在持久存储中。这可能位于文件系统(作为配置单元)或某个不可见位置(OEM 可以通过两种不同的方式存储它)。这不会在重置时丢失。只有保存而不是刷新的项目会丢失。
  • 作为#2 的附录 - 调用 RegFlushKey API 时会刷新注册表更改。安装 CAB 自动 调用这个(所以安装 CF 确实如此)。一些 OEM 还选择让它在定期计时器上刷新。
  • 当 CF GAC 处理不在图像中的项目时,文件为 搬家 到\Windows 文件夹。他们是 放回当组件卸载时(我几年前向 CF 团队提示过,但无济于事)。

  • 这意味着如果您将 CF 安装到存储卡并运行您的应用程序,则会发生这种情况:
  • CF 文件在解压 CAB 期间被复制到持久存储
  • 安装注册表键写成
  • 注册表已刷新(已保存)
  • 应用运行
  • CF 文件被移动(不复制)到\Windows,这是易变的。

  • 现在,如果您在加载 CF 程序集时重置设备 - 噗!没有更多的CF。您的应用程序在存储卡上,但不在 GAC 中,因此它可以存活但无法再运行。

    黑客解决方案:使用 native 应用程序“引导”以启动您的应用程序。让它在运行时检查\Windows 中的 CF 文件,如果它们不存在,则从持久存储中的某个位置安装 CF CAB(将其标记为只读,以便 wceload 不会删除它)。

    另一种选择是与您的应用程序一起分发 CF 程序集,而不是 GAC 它们。

    关于compact-framework - Windows CE 在重置时删除 .NET CF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/350539/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com