【问题标题】:Use Com class from LocalSystem使用 LocalSystem 中的 Com 类
【发布时间】:2011-03-01 21:54:32
【问题描述】:

我正在使用 Com 对象。 com 服务器应从作为特定帐户运行的 Windows 服务中使用。但是在此帐户中运行时,它无法加载 com,给了我这个异常:由于以下错误,从 IClassFactory 创建具有 CLSID {36998A63-857C-4​​B87-BC5E-72B7B3573F80} 的 COM 组件的实例失败:80010105 .

我尝试将帐户更改为 LocalSystem,但仍然失败,但更改 Windows 服务以使用我自己的帐户登录。

我想这与安装在我帐户上的 com 服务器有关。我使用“它的 name.exe /regserver”安装 com。我尝试将命令作为 LocalSystem 运行,然后它因断言而失败。我没有代码,所以我不知道问题出在哪里,是否有我应该检查的权限? 我还尝试在 Visual Studio 中切换嵌入互操作类型。

有什么帮助吗?

【问题讨论】:

  • 您是否使用 DCOM Config 设置了激活权限?
  • 嗨锐齿。我不知道那是什么,所以可能不是
  • 我启动了DCOMCNFG.EXE并试图找到它,但我找不到
  • 您必须打开“组件服务”->“这台计算机”->“DCOM 配置”,在那里找到您的 out-proc COM 服务器并调整其设置。
  • 诀窍是我运行的是Windows 64位并且com服务器是32,所以我需要像MMC comexp.msc /32一样运行它才能看到它。让它成为一个答案,所以我可以接受它。

标签: .net com windows-services


【解决方案1】:

您看到的错误是RPC_E_SERVERFAULT,这意味着在进程外 COM 服务器中存在未处理的 Win32 异常(例如,可能是访问冲突)。如果您既没有 COM 服务器的源代码也没有调试符号,则您不可能自行诊断或修复它。 (编辑:除非在 64 位机器上很明显,比如“位”不匹配 :-))

选项:

  • 如果您应该能够激活 服务器并使用它的 COM 在你的上下文中的对象 服务的帐户,那么您将需要 向供应商提出这个问题 服务器并让他们进行诊断和 修理它;
  • 您可以使用 DCOMCNFG.EXE (Identity 选项卡)来配置 COM 服务器 以您的身份运行 的默认值(即“启动用户”),看看这是否避免了故障问题(从你所说的听起来可能会)。

【讨论】:

  • 其实由于问题可能是缺少某些权限,他可以使用Process Monitor来尝试诊断问题。
  • @sharptooth:我可能错了(没有官方的 Microsoft 文档),但根据我的经验,RPC_E_SERVERFAULT 通常表明服务器实现中存在更基本的问题,例如访问冲突或除以零错误。缺少所需权限通常会显示为 E_ACCESSDENIED (0x80070005) 的 HRESULT。请务必查看 Process Monitor 是否可以告诉您任何信息,但我不确定您要寻找什么。
  • ...或“位”不匹配:-)
  • 将身份更改为“交互式用户”(或将我的帐户设置为显式)有效,因此我无法以我想要的帐户运行 Windows 服务。太好了,但是为什么本地 com 服务器必须像它一样运行呢?在 Windows Server 2003 上运行它时会遇到问题吗?我猜不会一直有交互式用户可用?
  • @Karsten:我建议更改 COM 服务器的身份,而不是 Windows 服务的身份 - 它仍然可以在服务帐户下运行。我不知道这是否给了你你想要的东西——我只是想为 SERVERFAULT 异常提出一个解决方法。如果服务可能在没有人登录时调用 COM 组件,您当然应该避免“交互式用户”。
【解决方案2】:

我刚刚从我们的朋友Hans Passant 在 Microsoft 新闻组线程上找到了这个。它非常好和中肯,我希望汉斯不会介意我引用它。

啊,可怕的 RPC_E_SERVERFAULT。 RPC 在 捕获任何 SEH 异常的存根 发生在 COM 服务器中。甚至 像AV这样的真正糟糕的人。这 客户收到异常通知 与 0x80010105。这太可怕了, 无法获取任何信息 关于例外的任何事情。甚至 更糟糕的是,服务器一直在运行, 现在通常是一团糟 向上内部状态由于 例外。你无能为力 关于它,但试图调试 COM 服务器找出它抛出的原因 例外。如果它是一个黑匣子 你,你会玩得很开心的 没有 COM 组件的支持 供应商。

【讨论】:

    猜你喜欢
    • 2012-01-26
    • 2010-11-18
    • 1970-01-01
    • 2017-01-17
    • 2010-09-17
    • 1970-01-01
    • 2017-02-15
    • 2020-11-05
    • 1970-01-01
    相关资源
    最近更新 更多