Вопрос

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

Я делаю что-то не так или это "специально"?

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

    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);
Это было полезно?

Решение

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

Другие советы

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

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

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

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

Вам нужно указать пустую строку, а не 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 поля пароля, затем нажимаю "Применить" и пытаюсь запустить его, это также не удается.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top