我正在通过对CreateService
的win32 API调用在C#中的计算机上创建服务。该函数的MSDN页面说明了lpServiceStartName
param:
应运行服务的帐户的名称。如果 服务类型是SERVICE_WIN32_OWN_PROCESS,在中使用帐户名 表单DomainName \ UserName。服务进程将以as身份登录 这个用户。如果该帐户属于内置域,则可以 指定。\ UserName。
在远程计算机上,用户myuser
属于默认本地域WORKGROUP
。如果我通过".\myuser"
,一切正常。如果我通过"WORKGROUP\myuser"
,我会ERROR_INVALID_SERVICE_ACCOUNT
。
我对这种行为感到好奇,因为上面的文档似乎说我可以指定.\myuser
,而不是我必须。任何人都可以对此有所了解吗?
答案 0 :(得分:1)
首先,我不是Windows帐户管理专家,我可能会在这里得到一些downvotes,但这是我在测试Windows服务登录身份时注意到的。 如文档所述,您可以指定"。\ UserName"如果该帐户属于内置域。内置域包括安装操作系统时创建的组和用户(link)。 因此,您可以指定" BUILTIN \ UserName"而不是"。\ UserName"因为BUILTIN是内置域的名称。
在实践中,它适用于" BUILTIN \ Administrators"和#34; BUILTIN \ Guests",但它对用户" BUILTIN \ Guest"没有用。 如果您尝试创建新的本地组和本地用户并将其设置为登录标识,您仍将在表单中看到它"。\ UserName"。这可能是文档中的不准确,但无论如何,对于非内置帐户的本地用户帐户,您可以使用计算机名称替换该点:" MACHINE \ UserName"。