在lpServiceStartName中明确指定本地域时调用CreateService错误

时间:2012-01-10 22:39:22

标签: c# winapi

我正在通过对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,而不是我必须。任何人都可以对此有所了解吗?

1 个答案:

答案 0 :(得分:1)

首先,我不是Windows帐户管理专家,我可能会在这里得到一些downvotes,但这是我在测试Windows服务登录身份时注意到的。 如文档所述,您可以指定"。\ UserName"如果该帐户属于内置域。内置域包括安装操作系统时创建的组和用户(link)。 因此,您可以指定" BUILTIN \ UserName"而不是"。\ UserName"因为BUILTIN是内置域的名称。

在实践中,它适用于" BUILTIN \ Administrators"和#34; BUILTIN \ Guests",但它对用户" BUILTIN \ Guest"没有用。 如果您尝试创建新的本地组和本地用户并将其设置为登录标识,您仍将在表单中看到它"。\ UserName"。这可能是文档中的不准确,但无论如何,对于非内置帐户的本地用户帐户,您可以使用计算机名称替换该点:" MACHINE \ UserName"。