你如何强制本地 COM 服务器在一个普通帐户下运行(本地系统会很好)?RunAs 文档似乎仅适用于 DCOM,并且不能在本地工作。
我面临的问题是我的 CoCreateInstance 是从在不同桌面上运行的进程调用的,并且在这种情况下,SCM 想要为每个桌面启动一个新服务器,我只想要一个实例 - 按照设计!
你如何强制本地 COM 服务器在一个普通帐户下运行(本地系统会很好)?RunAs 文档似乎仅适用于 DCOM,并且不能在本地工作。
我面临的问题是我的 CoCreateInstance 是从在不同桌面上运行的进程调用的,并且在这种情况下,SCM 想要为每个桌面启动一个新服务器,我只想要一个实例 - 按照设计!
您所描述的是系统服务,而不是 COM 服务器。COM 服务器设计为在运行它的任何会话下运行,而不是在“会话 0”(服务)或任何单个会话下运行。如果您需要仅在 1 个会话下运行并且对其他所有内容具有全局访问权限的东西,您应该使用 Windows 服务,而不是 COM 服务器。
如果您出于其他原因需要 COM 服务器方面,但希望在全球范围内共享资源或仍然有“一个进程”来控制您需要做的任何事情......您可以让您的 COM 服务器使用您喜欢的任何 IPC 方法与您的服务通信.
此外,在您的评论中,您说“当我从命令行运行时”——如果您从命令行运行 EXE,它是否注册为 COM 服务器并不重要,它就像任何其他 EXE/应用程序——这意味着它以您运行它的任何用户身份运行,在您所处的任何会话中。将 EXE 注册为 COM 服务器只允许其他进程运行该 EXE 并通过 OLE/COM 与其通信,但是EXE 仍然可以作为普通应用程序运行。例如,Microsoft Word 和 Outlook 都是 COM 服务器。也就是说,outlook.exe 是一个 COM 服务器,当然您也可以将其作为普通应用程序运行。