Сейчас на форуме: Kybyx (+3 невидимых) |
![]() |
eXeL@B —› Оффтоп —› Winapi CreateService |
Посл.ответ | Сообщение |
|
Создано: 30 октября 2014 11:42 · Личное сообщение · #1 предыстория мытарств чайника в поисках истины: жила была Windows XP. замечательная система, но некий гражданин Билли Г. решил что в новом виндовсе начальника безопасности не хватает и ввел такую бяку (благословение) как UAC. и вот наш чайник установив свою программу на висте\семерке\восьмерке понял, что его шедевр работать не будет. он решил схитрить и добавил обязательно требование администраторских прав при запуске приложения. однако UAC его перехитрил и просто перестал запускать из автозапуска это приложение. наш чайник тогда придумал грабли - без прав администратора, но при клике мышкой на иконке программы в систем трее предлагает повысить права и перезапускает с администраторскими правами. однако наш чайник начал чуствовать, что мыши коляться, плачут но продолжают жрать кактус. и решил он им помочь. чайник стал искать материалы как-же решить эту проблему и нашел статьи, что планировщик заданий позволяет запустить приложение с администраторскими правами при запуске системы. обрадовался, начал работать... и тут до него доперло, что планировщик заданий может быть отключен у некоторых пользователей. чайник приуныл... однако он через какое-то время наткнулся на статьи о запуске своего приложения как сервисную службу. надежда затеплилась вновь! но увы... в описании http://msdn.microsoft.com/en-us/library/windows/desktop/ms682450(v=vs.85).aspx остался непонятным момент с использованием lpServiceStartName [in, optional] The name of the account under which the service should run. If the service type is SERVICE_WIN32_OWN_PROCESS, use an account name in the form DomainName\UserName. The service process will be logged on as this user. If the account belongs to the built-in domain, you can specify .\UserName. откуда брать этот самый DomainName\UserName? и правильно ли что я его ищу, а проблема в чем: приложение при запуске находит путь до моих документов, оттуда читает какие-то конфигурационные файлы. например путь до папки "документс сеттингс\Администратор", однако если добавить службу с флагом NULL в команде CreateService - то само приложение запускается от LocalService чтоли... и соответственно путь до моих документов выглядит иначе - примерно "документс сеттингс\LocalService", а там моих документов как бы и нет... и соответственно приложение работать не хочет. посему правильно ли надеяться на этот самый параметр lpServiceStartName? то есть запустить приложение от имени пользователя, а не системы, чтобы определение пути до моих документов был верен. и второй момент - вист, семерок и восьмерок под рукой пока нет, для ХР это винапи CreateService работает, а будет ли работать на этих системах, а то может там какойнибудь сертификат нужен дополнительный и только время зазря теряю? ![]() |
|
Создано: 30 октября 2014 12:04 · Личное сообщение · #2 |
|
Создано: 30 октября 2014 12:37 · Личное сообщение · #3 DomainName тоже самое что имя компьютера? с UserName вроде разобрался - GetUserName... в итоге вышло примерно так: "MAIN\Администратор" а как теперь это значение указать в команде? CreateService_(schSCManager, @ServiceName.s,@DisplayName.s, dwDesiredAccess,dwServiceType,dwStartType,dwErrorControl,@PathToServiceEXE.s,0,0,0,"MAIN\Администратор",0) ругается. пишет неверные параметры. если вместо "MAIN\Администратор" указать 0 - работает. предположим имя и домейн я получил не верно, то можно проверить это указав кошерное имя типа NT AUTHORITY\LocalService или NT AUTHORITY\NetworkService - но и с ними пишет неверные параметры. это должна быть текстовая переменная или указатель? в описании этого я не понял... Добавлено спустя -42 минут так... еще момент - если у пользователя был пароль, то получается я не смогу создать службу? опять грабли... ![]() |
|
Создано: 30 октября 2014 13:48 · Личное сообщение · #4 SeregaZ пишет: однако UAC его перехитрил и просто перестал запускать из автозапуска Есть воркараунд: запускаться из RunOnce и каждый раз пересоздавать параметр. Тогда запускается от админа и молча. ----- PGP key ![]() |
|
Создано: 30 октября 2014 20:30 · Личное сообщение · #5 на заметку взял, спасибо. но все-таки хотелось бы разобраться. предварительно причина нашлась в совокупности параметров: dwServiceType.l=#SERVICE_WIN32_OWN_PROCESS | #SERVICE_INTERACTIVE_PROCESS If the service type specifies SERVICE_INTERACTIVE_PROCESS, the service must run in the LocalSystem account. то есть получается когда сразу два параметра указаны - то можно запустить только под этим локалом. для DomainName\UserName получается можно использовать только один параметр #SERVICE_WIN32_OWN_PROCESS без второго. в итоге служба в списке появляется, но стартануть не может. пишет Ошибка 1069: Служба не запущена из-за ошибки входа в систему в свойствах службы указан запуск с учетной записью .\Администратор - то есть вроде бы верно. пароля у меня вроде нет, а там куча звездочек. если их удалить и применить - все равно не запускает. все упирается в пароль для учетной записи? нет пароля - не даст запустить под DomainName\UserName? ![]() |
![]() |
eXeL@B —› Оффтоп —› Winapi CreateService |