什么是“无法设置分配”错误,谁发出它并且我该怎么办呢?

时间:2010-04-28 15:41:56

标签: windows debugging memory dll loadlibrary

我们多年来一直受到客户关于我们的应用启动时出现的无法设置错误消息“无法设置分配”的报告的困扰。到目前为止,我们还没有能够在我们自己的测试环境中重现这个问题。我现在已经没有尝试追踪这个想法了。以下是随着时间的推移积累的一系列观察结果:

  • 错误消息文本显示“无法设置分配”(请注意没有标点符号)。
  • 窗口标题只显示“错误”(或本地化的等效项)。
  • 无论操作系统区域设置如何,“无法设置分配”文本始终为英文。
  • 到目前为止,我无法找到包含消息文本的DLL或EXE。

  • 谷歌对于各种不同的产品充满了reports of this error - 但没有解决方案。

  • 到目前为止,我可以看到的受影响产品之间唯一统一的方面是它们似乎都以加载到第三方进程的DLL的形式出现(例如Visual Studio或Windows Explorer shell的加载项)扩展)。

  • 我们的应用程序实际上是用于MS Outlook的共享软件COM-addin,用Delphi编写(即本机代码 - 无.NET)。

  • 我们案例中的主要嫌疑人是我们正在使用的第三方许可包装程序,它会动态解密和解压缩我们的DLL到内存中。显然,我不能简单地向受影响的客户提供我们的应用程序的无保护版本来验证这种怀疑。也许其他被报道反对的供应商正在使用类似的产品。

  • 许可供应商提供给我们的保护包装器的调试版本没有产生任何结果:日志文件看起来与未发生错误的会话完全相同。显然,“内部”DLL可以解密和解压缩,但由于某些原因仍然无法被主机进程加载。

  • 通过创建一个不受保护的“加载器”DLL,我们能够在LoadLibrary调用后面的某个位置查明错误的发生,该调用应该将我们的DLL加载到内存中。

  • 我们自己的代码中的广泛的日志记录和全局异常挂钩(无保护的加载器和受保护的“核心”-DLL)根本没有产生任何结果。错误显然是在其他地方引起的。

  • this earlier question of mine中描述的问题很可能是由同一问题引起的。这是在我们创建未受保护的加载程序存根之前。

  • 错误仅发生在约1-2%的客户身上 - 而通常所有受影响客户网站的安装都受到相同的影响。

  • 有时候我们发布新版本后错误会消失,但通常会在几周或几个月后再次出现。
  • 一旦错误开始在机器上发生,它就会一直这样做。
  • 通过远程访问(例如VNC,RDP,TeamViewer等)连接到受影响的计算机时,永远不会发生错误,并且没有受影响的客户离我们只有一小段距离,所以我们所要做的就是日志文件和“目击证人报告”。

  • 一位客户报告说错误消息对话框显然是非模态的,即他只需将对话框移到一边并继续使用应用程序(减去我们的DLL提供的功能) 。不确定这在所有其他事件中是否普遍适用。

  • 在某些情况下,客户可以通过禁用或卸载与我们自己的产品共享主机应用程序的其他供应商的其他插件来永久摆脱错误。

  • 到目前为止,在Windows XP,Vista和7上都出现了错误。

  • 在过去的几周里,我们收到了来自Outlook 2003 / Windows 7用户的大量报告。最近的Windows / Office更新会使情况变得更糟吗?

有没有人对这个错误有任何经验?

还是有更多的想法来调查这个?

7 个答案:

答案 0 :(得分:2)

我最近才发生这种情况,这促使了我的搜索,我最终到了这里。我可以告诉你,对我来说肯定是在Windows 7家庭高级,但只有IE9(我讨厌它的方式)它减少了用户回到虚拟阶段,并假设我们必须重复标记所有事情。它会不断问你是否要禁用加载以加快加载时间,但通常情况下,首先不会降低浏览器速度的事情,首先是垃圾加载过多。但是回到“无法设置分配”,我一个人从来没有在任何其他浏览器中过期,这并不是说它不会发生在他们身上。

答案 1 :(得分:1)

如果您有一位愿意与您合作的客户,可能会对情况有所了解以获得崩溃转储(例如,使用ADPlus或者使用Sysinternals' ProcDump可能更简单)显示错误消息时。这将显示加载了哪些模块以及可能的callstack(如果它来自错误时的消息框,而不是在问题之后捕获异常的那个)。

答案 2 :(得分:1)

这将是纯粹的猜测工作,但听起来好像你的第三方许可软件试图将你的DLL加载到内存中的特定位置,在这些失败的系统上 - 恰好已被占用别的东西,也许是一个全局的钩子DLL。

答案 3 :(得分:0)

我也遇到了“无法设置分配”的问题。皇家的痛苦。我已经禁用了Java,因为我似乎不需要它,我使用添加/删除程序从我的系统中删除Java。然后我说要得到那些错误。我重新安装了,但在IE浏览器中禁用了Java。现在我不再收到错误了。不是程序员,不知道为什么会这样。也许是某人的线索。 赢7 - 64位操作系统IE浏览器10.希望这有助于有人解决这个问题。约翰

答案 4 :(得分:0)

我看到过这种情况。在我的例子中,一个全局钩子dll创建了一个大的内存文件映射,可能是许可dll依赖的内存。

答案 5 :(得分:0)

当我只打开谷歌浏览器时,我看到“无法设置分配”。在此之后,Chrome关闭了一个msg,上面写着“哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇......”

仍然没有解决方案:(

答案 6 :(得分:0)

也不是程序员,但是当我打开Chrome时总会发生这种情况。它打开第二个窗口,显示错误消息'无法设置分配'。我通常关闭它并继续前进。如果我不这样做通常会导致崩溃。在任何其他浏览器上都不会发生。