【问题标题】:COM out of process server starts multiple instancesCOM 进程外服务器启动多个实例
【发布时间】:2013-01-26 04:45:03
【问题描述】:

如何强制本地 COM 服务器在普通帐户下运行(本地系统会很好)? RunAs 文档似乎仅适用于 DCOM,并且不能在本地工作。

我面临的问题是,我的 CoCreateInstance 是从在不同桌面上运行的进程调用的,并且这种情况下的 SCM 想要为每个桌面启动一个新服务器,我只想要一个实例 - 正如设计的那样!

【问题讨论】:

  • 这更适合ServerFault?
  • DCOM 也用于本地服务器。您是否尝试过使用DCOM Config 并更改Identity
  • 当然有,没有区别。我希望在任务管理器中看到 SYSTEM 但是当我从命令行运行时它仍然在我的 ID 下运行

标签: com out-of-process


【解决方案1】:

您所描述的是系统服务,而不是 COM 服务器。 COM 服务器设计为在运行它的任何会话下运行,而不是在“会话 0”(服务)或任何单个会话下运行。如果您需要仅在 1 个会话下运行并且可以全局访问其他所有内容的东西,您应该使用 Windows 服务,而不是 COM 服务器。

如果您出于其他原因需要 COM 服务器方面,但希望在全球范围内共享资源或仍然有“一个进程”来控制您需要做的任何事情......您可以让您的 COM 服务器使用任何 IPC 与您的服务通信你喜欢的方法。

另外,在您的 cmets 中,您说“当我从命令行运行时”——如果您从命令行运行 EXE,它是否注册为 COM 服务器并不重要,它只是像任何其他 EXE/应用程序一样运行——这意味着它以任何用户身份运行,在任何会话中运行。将 EXE 注册为 COM 服务器只允许其他进程运行该 EXE 并通过 OLE/与其通信COM,但 EXE 仍然可以作为普通应用程序运行。例如,Microsoft Word 和 Outlook 都是 COM 服务器。也就是说,outlook.exe 是一个 COM 服务器,当然您也可以将其作为普通应用程序运行。

【讨论】:

  • 谢谢,明白了。我已经转换为 Windows 服务,并且运行良好。
猜你喜欢
  • 2014-02-18
  • 1970-01-01
  • 2013-01-20
  • 2012-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-23
  • 2011-08-17
相关资源
最近更新 更多