Стоит задача написать сервис NT. Скелет я написал. Запускаю его как SERVICE_WIN32_OWN_PROCESS. Но есть проблема. При попытке обращения к реестру к ветке HKLM (там имеется пользовательский ключ с данными), сервис виснет. Поскольку в дальнейшем нужно будет навесить к нему обращение к базе данных, то боюсь потерпеть неудачу. Обращение к реестру пытаюсь сделать после инициализации сервиса в самом конце пользовательской процедуры ServiceMainProc. Может не там это делаю? Подскажите кто знает, пожалуйста.
Это просто пипець, столько статей, сурсов, на чем хочешь, а ты такую гадость говоришь, стыдно должно быть.
как будто у тебя там в коде порнография ... А не проще создать программу спрятать хотяб из панели задачь и пусть она обращается к реестру через WinAPI ...
irrona - сервис фактически ничем не отличается от обычного приложения. Драйвер - да. сервис - нет. делай выводы. ничего там виснуть не должно.
Если ты обращаешься к HKLU (локал юзер), то проблема обстоит в следующем: сервис грузится ДО входа в систему. И юзер не определен. Обращайся к другим веткам. Сам долго парился. Удачи.
perez, на самом деле не соглашусь с Вашим утверждением. HKCU доступен из-под сервиса. Т.к. HKCU - это просто симлинк на HKEY_USERS\USER_SID При этом у LocalSystem (под которым скорее всего крутится сервис - есть SID. Он у всех аккаунтов есьт. Loclalsystem не исключение). Далее... Этот симлинк живет и существует в контексте конкретного WindowStation - т.е. если к примеру взять терминал-сервер - то для каждой сессии (если пользователи разные) HKCU будет указывать в разные места. Соответсвенно при старте сервиса - естественно создается WindowStation для аккаунта LocalSystem и в ней крутится этот сервис. И соответсвенно у него есть HKCU. Насчет контекста в котором живет этот симлинк - могу ошибаться. НО смысл остается тот же - у сервисов под LocalSystem есть HKCU И он с этапом входа пользователя в систему никак не связан. Далее - даже если бы было так - не может он виснуть. Не может виснуть по той причине, что RegOpenKey вернул бы двойку, а не повис, если бы HKCU не существовало.
Для примера - могу предложить поменять у сервиса Print Spooler Image Path на %systemroot%\system32\regedt32.exe и перезапустить сервис. В открытом Regedit - посмотреть что будет под HKCU.
flankerx: куррент юзер, к вечеру мозги плавятся Я писал сервис под XP SP1, хотел работать с ключем из HKCU. Корректно не работала ни одна функция. С другими ветками все ОК.
perez Если ты обращаешься к HKLU (локал юзер) Я написал HKLM (local machine) Ошибка была в вызове RegOpenKeyEx. Функция возвращала ошибку, а сервис переставал отвечать на запросы SCM (а может просто ставил их в очередь). Переписал блок кода - вроде работает.