【问题标题】:Since Windows Update kb4340556: VBA COM .NET Automation error on CreateObject()由于 Windows 更新 kb4340556:CreateObject() 上的 VBA COM .NET 自动化错误
【发布时间】:2018-12-19 06:33:51
【问题描述】:

自 2018 年 7 月 10 日更新 Windows7 Update KB 4340556 以来,我们收到以下错误消息:

"Automation Error"The system cannot find the file specified" from the Access VBA CreateObject() call.

 Set ComClass = CreateObject("MyApplication1.InteropStart")

Microsoft 认为这是一个安全问题。

如果我们卸载更新 KB4340556,调用将像以前一样工作。

有人有同样的问题吗?还是比卸载更新更好的解决方案?

【问题讨论】:

  • 我们有很多客户的问题。目前有40多台机器。目前仅在 Windows 7 SP1 64 位系统上。 Windows 7 32 位系统不受影响。
  • 我在安装该更新时遇到了许多 Windows 更新错误...马上要重新启动。 (我也是Win7)
  • 我们在 Windows Server 2012 R2 上遇到了同样的问题。当您查看更新历史时,2012 R2 的相关 Windows 更新为 KB4340558,当您查看已安装更新时,相关的 Windows 更新为 KB4338424。当我们卸载更新时,错误消失了。尽管我尽了最大努力,但我无法找到卸载的替代解决方案。我们也希望有更好的解决方案。
  • 我在 Windows 10 x64 上看到这个,“429:ActiveX 组件无法创建对象”,卸载 KB4338819 解决了这个问题。在 Windows 7 x64 上,我们遇到了 KB4338420 的问题

标签: .net vba vb.net ms-access windows-update


【解决方案1】:

我们也受到多个客户的影响。

我排除了我们程序集的无效强名称签名,因为来自框架本身的 .NET 程序集也受到该拒绝访问错误的影响。

最后我设法通过配置解决了这个问题。 显然,网站的身份验证现在必须与应用程序池的身份相匹配。或者 IUSR 没有足够的权限。

【讨论】:

  • 谢谢。今早醒来发现问题。这为我“修复”了它
  • 这是解决它的答案。自上周 Windows 安全更新以来,我遇到了同样的问题(但是,在创建对象时“权限被拒绝”)。我有点绝望,不得不使用 .net dll 和 com 重写所有代码。非常感谢
  • 好的,它适用于匿名身份验证,但我无法在 Windows 身份验证上执行此操作。
【解决方案2】:

我们的 Interop .Net 程序集有一个带有强名称的签名。签名显然不再被接受。在 Visual Studio 中创建新签名(* .snk 文件)会导致 CreateObject ComInterop 调用再次起作用。

编辑 26.07.2018

我们在来自 Pao'lino 所描述的客户的机器上启用了用户帐户控制 (UAC)。

创建新签名还会为程序集创建新的公钥令牌。这会导致引用问题。

【讨论】:

  • Visual Studio 的哪个版本?您是否使用 VS 生成的密钥(例如不受信任的根)?你能分辨出证书是SHA1还是SHA256吗?
  • 作为替代方案,不要强命名您的程序集。正如@HansPassant 提到的链接中所述,它并不意味着用作安全机制。当我们考虑到在 COM 上下文中一次只能加载一个版本的库时,强名称的唯一好用例就不存在了。
  • 对于 [ComVisible] 程序集很重要,它们属于用户机器上的 GAC 以解决 DLL Hell。
  • 明白。安装库的未签名版本仍然会出现相同的错误。我真的很困惑。
【解决方案3】:

我们也遇到了问题。我们发现实际上是 KB4340556 - KB4338420 中的嵌入式更新之一导致了我们的问题。

我们有一个应用程序,它使用 COM 对象作为它自己和 MS Office 之间的钩子。安装此更新删除了导致所需 mscoree.dll 无法加载的 COM 对象。 仅在安装了 64 位 Office 产品的 64 位 Win7 上看到问题。

我已在 Visualstudio.com (https://developercommunity.visualstudio.com/content/problem/291884/july-2018-cumlative-security-and-quality-update-kb.html) 的 .NET 论坛中向开发人员社区发帖。问题目前正在分流中。 删除 KB4338420 可以暂时解决问题,但是下次您的系统检查更新时,它会认为 KB4340556 未安装并想要重新安装它。目前唯一的解决方法是隐藏更新,因为它只是缺少 KB4338420。

【讨论】:

    【解决方案4】:

    启用 UAC 并将其设置为默认级别为我们解决了这个问题。

    我们的场景是暴露给 COM 的 .NET 程序集和一个用 CreateObject 实例化这个 .NET 对象的 VB6 应用程序。

    更新.. UAC 技巧在 Windows Server 2012 R2 上不起作用。

    【讨论】:

    • 投反对票是为了什么?只是把我的经验,这样我们修复了很多电脑。
    【解决方案5】:

    为了证实这里其他用户所说的话。我们在 KB4340556 之后也遇到了问题。以下代码

    Set myObject = CreateObject("System.Collections.ArrayList")

    在 IIS 和 Server 2008r2 64 位上运行的经典 ASP 中创建 .NET 组件时导致“权限被拒绝”错误。

    在 .vbs 文件(32 位)中运行的相同代码运行良好。

    在应用程序池中指定不同版本的 .NET 无效。

    【讨论】:

      【解决方案6】:
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-04
      • 2021-05-04
      • 1970-01-01
      • 2012-08-11
      • 1970-01-01
      • 2014-02-22
      • 2016-06-28
      相关资源
      最近更新 更多