以没有密码的用户身份启动服务
时间:2020-03-06 14:41:46 来源:igfitidea点击:
我试图以用户身份启动服务,并且一切正常,直到尝试使用没有密码的用户为止。然后,它无法启动(由于登录错误)。
我是在做错什么,还是"设计使然"?
注册此服务的代码:
SC_HANDLE schService = CreateService(
schSCManager,
strNameNoSpaces,
strServiceName,
SERVICE_ALL_ACCESS,
SERVICE_WIN32_OWN_PROCESS,
SERVICE_AUTO_START,
SERVICE_ERROR_NORMAL,
szPath,
NULL,
NULL,
NULL,
strUser,
(strPassword.IsEmpty())?NULL:strPassword);
解决方案
我们需要指定一个空字符串,如果没有密码,则不能为NULL。 NULL不是有效的空字符串,""是。可能我们应该只为最后一个参数传递strPassword。
SC_HANDLE schService = CreateService(
schSCManager,
strNameNoSpaces,
strServiceName,
SERVICE_ALL_ACCESS,
SERVICE_WIN32_OWN_PROCESS,
SERVICE_AUTO_START,
SERVICE_ERROR_NORMAL,
szPath,
NULL,
NULL,
NULL,
strUser,
// change this line to:
strPassword.IsEmpty() ? L"" : strPassword);
// or maybe
strPassword);
谢谢,我实际上已经尝试过了,但是无济于事。
如果我启动services.msc,请手动进入服务属性并清除2个密码字段,然后按"应用"并尝试启动它,它也会失败。
这可能是由于OS安全要求或者安全策略所致。检查安全策略以查看是否有任何相关内容。
是的,它确实与安全策略有关。详细说明:
http://technet.microsoft.com/zh-CN/library/bb457114.aspx
"如果要禁用不使用密码登录网络的限制,则可以通过本地安全策略来执行。可以使用本地安全策略或者组策略MMC管理单元来修改控制空白密码限制的策略设置。我们可以使用任一工具在"安全设置" "本地策略" "安全选项"中找到此策略选项。该策略的名称为"帐户:限制本地帐户使用空白密码来仅通过控制台登录。默认情况下启用"。
禁用该功能后,一切正常。

