WinXp сервис

Есть программное обеспечение, которое включает в себя сервис. На win7 работа его была стабильной. В момент запуска сервис читает переменную в реестре в HKEY_LOCAL_MACHINE\System. Все стабильно работает. Начал адаптировать и тестировать на win7. В WinXP сервису не хватает прав, чтобы прочесть в реестре эту переменную. Код создания одинаков. http://code.msdn.microsoft.com/windo...rvice-cacf4948Собственно, если я не ошибаюсь, то ошибка, почему то, в создании сервиса, если я его хочу сделать LocalSystem, а не LocalService аккаунтом.
4 ответа

LocalSystem имеет полные права в системе, привилегию SE_TCB_NAME и SID админа. Он не только читать, но и писать может куда угодно. А вот LocalService ограничен. И это справедливо как для Windows 7, так и для Windows XP.Код чтения реестра можете показать ? Желательно с кодами ошибок.


Ошибка в логике создания CreateService Привожу пример функции schService = CreateService( schSCManager, // SCManager database "CrystalProtection", // Name of service "CrystalProtection Corporation", // Name to display SERVICE_QUERY_STATUS, // Desired access SERVICE_INTERACTIVE_PROCESS,// // Service type SERVICE_SYSTEM_START, // Service start type SERVICE_ERROR_NORMAL, // Error control type szPath, // Service's binary NULL, // No load ordering group NULL, // No tag identifier NULL, // Dependencies NULL,// // Service running account NULL // Password of the account );Функция возвращает 0 И GetLastError выдаёт 0, а потом 183(ALREADY_EXIST)! НО, я через sc start - запустить сервис не могу - пишет - сервиса не существует. МОжет, я его создал, но запустить не могу?


schService = CreateService(
 schSCManager, // SCManager database
 "CrystalProtection", // Name of service
 "CrystalProtection Corporation", // Name to display
 SERVICE_QUERY_STATUS, // Desired access
 SERVICE_INTERACTIVE_PROCESS,// // Service type
 SERVICE_SYSTEM_START, // Service start type
 SERVICE_ERROR_NORMAL, // Error control type
 szPath, // Service's binary
 NULL, // No load ordering group
 NULL, // No tag identifier
 NULL, // Dependencies
 NULL,// // Service running account
 NULL // Password of the account
 );
Код неправильный. Тип службы должен быть или SERVICE_WIN32_OWN_PROCESS, или, если вы хостите несколько служб в одном exe, а-ля svchost.exe, SERVICE_WIN32_SHARE_PROCESS. SERVICE_INTERACTIVE_PROCESS уберите вообще, этот флаг для современных служб не нужен и работает только на системах до Windows Vista. SERVICE_SYSTEM_START - тоже неверно, этот тип запуска, как и SERVICE_BOOT_START, только для драйверов.Кстати, Вы же не хотите сказать, что этот код работал на Windows 7 ?


Нет, для 7ки я делал localService. Он имеет права на чтение в HKEY_LOCAL_MACHINE и пример настоек от MSDN я не трогал. А сейчас это уже код моего изыскания только для XP. В любом случае, огромное спасибо, сервис запустился и прочитал реестр.