【问题标题】:Shell extension causing explorer to crash with OneDrive for BusinessShell 扩展导致资源管理器与 OneDrive for Business 一起崩溃
【发布时间】:2016-09-21 05:27:36
【问题描述】:

我创建了一个Shell 扩展,它为文件和文件夹添加了图标覆盖。但是,在我的系统上使用 OneDrive for Business 时,我遇到了问题。当我打开 OneDrive 共享文件夹时,资源管理器崩溃并出现错误:

只有当我取消注册我的 Shell 扩展时,该问题才会得到解决。我尝试调试崩溃,发现它根本没有引用我的扩展 dll:

我的扩展程序有问题吗?还是这是微软的问题?注册的叠加层数低于限制。我什至尝试重命名 OneDrive 覆盖以赋予它们优先级,但问题仍然存在。

【问题讨论】:

  • Shell 扩展被加载到 explorer.exe 进程空间。如果您的扩展程序崩溃或调用exit(),它会带上资源管理器。
  • 我的扩展程序有问题吗? 可能。 Explorer 经过了很好的测试,所以我认为它是微软的错的可能性很低。没有代码,这里没有人可以肯定地回答。
  • @RyanBemrose 在我的情况下,它在崩溃前没有进入我的 Shell 扩展 Dll。访问 OneDrive for Business 文件夹会导致崩溃。
  • 你能确定它没有进入你的分机吗?在没有加载扩展程序的情况下会发生崩溃吗?您是否在每个入口点都有跟踪? FWIW,仅仅因为您的代码不在上面打印的调用堆栈上并不意味着您的代码中的错误没有在某处损坏内存。

标签: windows windows-shell shell-extensions


【解决方案1】:

我终于找到了解决办法。问题是我为每个覆盖图标检查创建了一个指针对象(并在之后立即发布)。由于覆盖图标检查是一个多线程操作,因此同时创建了许多对象。

One Drive for Business 正在尝试执行一些 GC 操作(需要大量内存),当存在许多指针时该操作会失败。引发内存不足异常并导致资源管理器崩溃。

我现在对所有图标覆盖检查使用一个通用指针对象,这解决了这个问题。

【讨论】:

    猜你喜欢
    • 2020-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多