| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: WinAPI и системное программирование > Послать сигнал от приложения к сервису |
| Автор: MbIcJIuBcJIyX 16.8.2008, 22:16 | ||
| Приветствую. Такая проблема, сделал сервис который должен получать сигнал от приложения, в приложении создаю CreateEvent, посылаю SetEvent, а в сервисе ловлю событие с помощью OpenEvent и WaitForSingleObject, в XP все прекрасно работает, но в Висте увы нет. пробывал наоборот, в сервисе делать CreateEvent и WaitForSingleObject, а в приложении OpenEvent и SetEvent, ни в XP не в висте не работает. собственно вопрос, почему на висте не работает? у CreateEvent есть интересный параметр, типа TSecurityAttributes, честно говорят не очень разбираюсь в этом, нашел пару примеров в Инете заполучения этого параметра, но при этом вылетает ошибка Отказано в доступе. пример:
как же все таки послать сигнал из приложения сервису, нужен исключительно сигнал, т.к. никаких данных передать не нужно. |
| Автор: safright 16.8.2008, 23:01 |
| Врядли поможет, но вот небольшой ликбез: каждый процесс, шире - действие программы, имеют некоторый дескриптор безопасности (не путать с дескриптором окна). В дескрипторе содержится довольно много инфы, ключевой является маска доступа: к чему имеет право обращаться/изменять/удалять и т.д. процесс с данным дескриптором. В WinXP за дескриптор безопасности пользователя отвечает winlogon (можно на него глянуть в process manager'е), т.е. все действия пользователя выполняются с дескриптором безопасности, который задан для этого процесса. Программы, запускаемые пользователем обычно имеют дескриптор безопасности от explorer.exe (опять же можно посмотреть в дереве процессов). Хотя есть возможность поместить его в srvices... В общем, по моему непрофессиональному мнению: причина может быть в том, что сервису не хватает прав доступа (возможно - как раз стоит поместить его в уровень повыше), либо, что оч возможно - "Винда свято мешает юзеру сделать что-то опасное". Отключи всю защиту - мб дело в файрволле. |
| Автор: MbIcJIuBcJIyX 16.8.2008, 23:22 |
| Способ: отключить защиту не приемлем в моем случае я шароварщик, пишу для публики возможно есть другой способ подать сигнал из приложения сервису? |
| Автор: BaD_SeCt0R 17.8.2008, 00:46 | ||
MMF? |
| Автор: MbIcJIuBcJIyX 17.8.2008, 01:07 |
| MMF? |
| Автор: BaD_SeCt0R 17.8.2008, 09:55 |
Memory Mapped Files |
| Автор: MbIcJIuBcJIyX 17.8.2008, 11:27 |
| разве MMF может дать сигнал? это скорей для обмена данными, как сервис узнает что я создал file mapping? CreateFileMapping так же как и CreateEvent имеет параметр типа PSecurityAttributes, что то мне подсказывает что я столкнусть с той же проблемой в висте. |
| Автор: BaD_SeCt0R 17.8.2008, 11:42 |
прости, значит не так понял А вообще вариантов масса. Сокеты, пайпы, можно даже сделать сервису невидимое окошко и слать туда сообщения. |
| Автор: MbIcJIuBcJIyX 17.8.2008, 12:06 |
| сокеты и пайпы я оставил как запасной вариант, от без исходности если что а с невидимым окошком на висте уже не прокатывает, на XP без проблем. |
| Автор: BaD_SeCt0R 17.8.2008, 12:55 |
Да и вообще окно может стать причиной нестабильности сервиса. |
| Автор: safright 17.8.2008, 16:48 |
| Не помню, ибо не знаю, но можно еще иконку в трей пихнуть - она, кажется, тож получает дескриптор |
| Автор: MbIcJIuBcJIyX 17.8.2008, 21:55 |
| Иконка в трей к сожалению тоже не вариант. |
| Автор: Virtuals 18.8.2008, 13:48 |
| MbIcJIuBcJIyX, может попробовать Mutexes или Semaphores |
| Автор: CodeMonkey 25.8.2008, 11:33 |
| http://www.delphikingdom.com/table/search.asp?namekey=security&ItemID=352&isQuestion=2&QwUserID=&TypeEqv=0&Count=20 В частности: http://www.delphikingdom.com/asp/answer.asp?IDAnswer=60360 |