Запуск сервиса от имени пользователя без пароля - PullRequest
2 голосов
/ 25 сентября 2008

Я пытаюсь запустить службу как пользователь, и все работает нормально, пока я не попробую пользователя, у которого нет пароля. Затем он не запускается (из-за ошибки входа в систему).

Я что-то не так делаю или это "по замыслу"?

Код для регистрации этой услуги:

    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);

Ответы [ 4 ]

2 голосов
/ 25 сентября 2008

Да, это действительно было связано с политикой безопасности. Для уточнения:

http://technet.microsoft.com/en-us/library/bb457114.aspx

"Если вы хотите отключить ограничение на вход в сеть без пароля, это можно сделать с помощью локальной политики безопасности. Параметр политики, управляющий пустым ограничением пароля, можно изменить с помощью локальной политики безопасности или MMC групповой политики. Оснастки. Вы можете использовать любой инструмент, чтобы найти этот параметр политики в Параметры безопасности \ Локальные политики \ Параметры безопасности . Название политики: Учетные записи: Ограничить использование локальной учетной записи пустыми паролями для консоли вход только . По умолчанию включен. "

После отключения все работает нормально.

2 голосов
/ 25 сентября 2008

Это может быть связано с требованиями безопасности ОС или политикой безопасности. Проверьте политики безопасности, чтобы увидеть, если что-то там уместно.

0 голосов
/ 25 сентября 2008

Спасибо. Сначала я попробовал это на самом деле, но безрезультатно.

Если я запускаю services.msc, вручную захожу в свойства службы и очищаю 2 поля пароля, затем нажимаю «Применить» и пытаюсь запустить его, это также не удается.

0 голосов
/ 25 сентября 2008

Вам необходимо указать пустую строку, а не 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);
...