![]() |
|
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]()
|
|
| Cashey |
|
|||
![]() Бессмертный ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3441 Регистрация: 13.11.2002 Где: в столице Репутация: нет Всего: 60 |
смысл примерно такой
но при запуске из менеджера сервисов генерится ошибка - Неизвестное программное исключение. предпологаю, что не нравится хэндл для ShellExecute. И паралельно вопрос, есть ли в Дельфи команда для запуска на исполнение внешнего файла, иная чем апишная ShellExecute? -------------------- библия учит любить ближнего, а камасутра обучает как именно |
|||
|
||||
| Qu1nt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 602 Регистрация: 13.1.2007 Репутация: 5 Всего: 50 |
WinExec, CreateProcess...
|
|||
|
||||
| CodeMonkey |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 16 Всего: 89 |
А чего вы хотите достичь такой странной конструкцией?
-------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
| Virtuals |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 476 Регистрация: 27.11.2006 Репутация: 4 Всего: 11 |
ну вот так работать будет, почему так? ... ну что вспомню: а. важно: SleepEx(500,ServiceStatus.dwCurrentState = SERVICE_STOPPED); CreateX; Это сообщение отредактировал(а) Virtuals - 22.7.2008, 12:27 |
|||
|
||||
| Riply |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Комодератор Сообщений: 572 Регистрация: 27.3.2007 Где: St. Petersburg Репутация: 21 Всего: 32 |
Я бы воздержалась от столь сомнительного утверждения P.S. Начала смотреть код, и как только увидела, что процедура CreateX исключает всякую возможность закрыть после нее открытые Handl`ы, поняла, что дальше можно не смотреть, ибо будущий баг профессионально заложен в первых же строчках. P.P.S. А потом еще спрашивают: "как такое модет быть ? Мой сервис стабильно работает, но через (час, день, неделю падает). Ошибок в нем нет, ведь первый час работает !" |
|||
|
||||
| Virtuals |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 476 Регистрация: 27.11.2006 Репутация: 4 Всего: 11 |
Riply,
это не сомнительное утверждение, а кусок кода из рабочего проекта а мне и ненужно было стабильной работы сервиса, в данном примере реализованно только запустить процесс с правами систем и открытые Handl`ы мне побарабану были, этож только пример а не готовое прилизанное решение, и в нем хорошо просматриваются многие грабли, на которые нестоит наступать. ну для примера вот про это многие забывают, почемуто...
а при старте из сервиса, это ой как важно ЗЫ хотя если честно сервис стабилен и невылетает., имхо у мну принцип - отлаживаю куски в маненьких демках и только после этого переписываю все в проект. Это сообщение отредактировал(а) Virtuals - 22.7.2008, 10:33 |
|||
|
||||
| Riply |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Комодератор Сообщений: 572 Регистрация: 27.3.2007 Где: St. Petersburg Репутация: 21 Всего: 32 |
Но надо учитывать, что выложенный тобой пример, кто-то будет использовать при помощи тупого копи/пайста, поэтому , тогда уж предупреждай: "ребята, мне было лень заниматься уборкой, сделайте это сами". И еще: Мне совершенно непонятно почему все боятся утечки памяти (ловят ее, тратят на это силы), и в то же время наплевательски относятся к утечке Handl`ов ? Она не менее страшна чем утечка памяти, а может даже и более. Просто для получения эффекта от нее должно пройти больше "итераций", а память может "переполнится" довольно быстро, если большими кусками |
|||
|
||||
| Virtuals |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 476 Регистрация: 27.11.2006 Репутация: 4 Всего: 11 |
Riply,
так лучше?
|
|||
|
||||
| Riply |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Комодератор Сообщений: 572 Регистрация: 27.3.2007 Где: St. Petersburg Репутация: 21 Всего: 32 |
Угу. Только пусть функция возвращает Boolean (что и получила от CreateProcess), меньше путаницы будет |
|||
|
||||
| Virtuals |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 476 Регистрация: 27.11.2006 Репутация: 4 Всего: 11 |
Riply, фиг мне так больше нравится
кстати дополнил примерчик ради полноты картины |
|||
|
||||
| Cashey |
|
|||
![]() Бессмертный ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3441 Регистрация: 13.11.2002 Где: в столице Репутация: нет Всего: 60 |
я лично всегда разбираю код, а не использую тупое капи\паст Virtuals, не поверишь, но по факту не работает я так понял ты создавал сервис вручную, я же использую TService. возможно, не отрабатывается Start, а возможно NOD блочит запуск файла из сервиса. самое противное, что не удается службу отрейсить.... -------------------- библия учит любить ближнего, а камасутра обучает как именно |
|||
|
||||
| Virtuals |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 476 Регистрация: 27.11.2006 Репутация: 4 Всего: 11 |
Cashey, а файл точно не запускается? может бонально пути неправильные?
и как это не получается отрейсить? ну понятно что дебуг здесь не в помощь но посмотри внимательно мой пример, и вот те недостающая но нужная часть
ЗЫ если нужно могу весь код скинуть позже... |
|||
|
||||
| Cashey |
|
|||
![]() Бессмертный ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3441 Регистрация: 13.11.2002 Где: в столице Репутация: нет Всего: 60 |
пытаюсь разобратся про файловый трейсинг я с самого начало подумал, но тогда служба отказывается запускатся. Пишет не получен вовремя отзыв -------------------- библия учит любить ближнего, а камасутра обучает как именно |
|||
|
||||
| Riply |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Комодератор Сообщений: 572 Регистрация: 27.3.2007 Где: St. Petersburg Репутация: 21 Всего: 32 |
Cashey, а я тебя и не имела ввиду, ветка то открыта для всех. Мало ли кто сюда забредет |
|||
|
||||
| CodeMonkey |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 16 Всего: 89 |
Да ладно. Компилируем службу с включенной отладочной информацией, включая инфу TD32. Устанавливаем Output Directory в свойствах проекта в ту папку, где у вас лежит установленная служба (C:\Windows\System32?). Отбилдили, службу запустили. Далее в меню Delphi: Run/Attach to Process. Всё. Ставим на паузу, расставляем бряки, потом возобновляем процесс и отлаживаемся. Вроде ничего не забыл. Cashey, может быть вы прокомментируете, что вы хотите добиться? Просто запустить процесс из службы? Запустить процесс из службы для какого-то пользователя? Запустить процесс из службы для интерактивного пользователя? Может быть уведомить пользователя о каком-то событии (у меня вызвал подозрение флаг SW_RESTORE)? Что из этого? Или ещё что-то? Какая у вас служба? Интерактивная или нет? Под XP или под Vista? Дайте же информацию. Если это не является слишком уж большим секретом, то расскажите про свою задачу. Возможно, в этом случае Вы получите более толковый ответ. А то белиберда может получиться. Грубо говоря, если играешь в рулетку, то иметь 36 различных рекомендаций по тому, на какой номер ставить, -- это все равно, что не иметь ни одной © Geo. -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
| Cashey |
|
|||
![]() Бессмертный ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3441 Регистрация: 13.11.2002 Где: в столице Репутация: нет Всего: 60 |
Опаньки....
А функция то отробатывается. В Таск Менеджере процесс появляется, но визуально программа не появилась, хотя имеет визуальный интерфейс... -------------------- библия учит любить ближнего, а камасутра обучает как именно |
|||
|
||||
| CodeMonkey |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 16 Всего: 89 |
Cashey, не в обиду будет сказано, но, может быть, предварительно стоит почитать что-то про службы? Вот, например, для начала: http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=1348
-------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
| Cashey |
|
|||
![]() Бессмертный ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3441 Регистрация: 13.11.2002 Где: в столице Репутация: нет Всего: 60 |
конечный смысл такой, служба должна отслеживать запущен ли конкретный файл и если его выгрузили то запустить заново. Программа при старте сворачивается в трей и мониторит действия пользователя. Под ХР для текущего пользователя. в кратце все. Добавлено через 2 минуты и 4 секунды
спасибо. сейчас ознакомлюсь... -------------------- библия учит любить ближнего, а камасутра обучает как именно |
|||
|
||||
| CodeMonkey |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 16 Всего: 89 |
Вам нужно понимать, чем работа сервиса отличается от работы простого приложения. В частности, хоть немного про то, под каким пользователем что работает, кто такие "сеансы", и чем интерактивный сервис отличается от не-интерактивного.
А после того, как вы это поняли - осознать, что сейчас вы пытаетесь написать криворукого монстра. Я серьёзно, лучше отказаться от этой затеи. Особенно, если учесть, что службы относятся к высоконадёжной доверенной части системы. И любые кривые службы (поверьте, ваша первая будет именно такой) будут очень негативно сказываться на работе всей машине. Видимая простота создания служб в Delphi создаёт впечатление, что создавать службы - легко и просто. Поверьте: это не так. Я не буду касаться темы unkillable app (просто почитать: http://blogs.msdn.com/oldnewthing/archive/...2/16/73780.aspx , http://blog.delphi-jedi.net/2008/03/17/you...-undestroyable/ ), но скажу, что это действительно неблагодарная тема. Почему вы думаете, что пользователь не остановит службу? Если ему не дадут это сделать какие-то права, то почему бы не запустить обычное приложение с теми же правами? Тогда пользователь не сможет его закрыть. Ещё вариант - запуск приложения и его копии. Пусть две копии следят друг за другом. Под Vista вообще оптимальное решение - использовать новые API ( http://msdn.microsoft.com/en-us/library/bb525421(VS.85).aspx ). Но, правда, это только как защита от вылетов приложения. Если вам уж так сильно приспичит именно сервис (я действительно рекомендую подумать ещё раз), то попробуйте ещё посмотреть: http://www.delphikingdom.ru/table/search.a...B2&Count=50 Это сообщение отредактировал(а) CodeMonkey - 22.7.2008, 17:09 -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
| Virtuals |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 476 Регистрация: 27.11.2006 Репутация: 4 Всего: 11 |
Cashey,
ну блин какой особенный
файловый трейсинг почемуто у меня работает а у тебя нет...хотя уже наводит на мысль где у тя ошибки а может ну его TService, и ручками? ведь красявше получается и кода кот наплакал. ... 1. между begin и StartServiceCtrlDispatcher должно пройти минимум времени и тут файловыми операциями лучше не заниматся! Добавлено через 9 минут и 11 секунд Cashey, блин а для кого я здесь распинался с
и еще отдельно пометил про эту постоянную ошибку!!! нука быстро учить матчасть про столы и оконные станции а нафига у тя в коде Sleep(5000); чтобы менеджер сервисов гарантированно неувидел???
Добавлено через 12 минут и 54 секунды кстати стол пользователя по умолчанию обычно "Default" |
||||||
|
|||||||
| Virtuals |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 476 Регистрация: 27.11.2006 Репутация: 4 Всего: 11 |
Cashey,
и еще появилось чувство дежавю а нука пролистни страницу в самый низ и глянь А здесь смотрели? особо почитай Работа с ActiveX из NT сервиса, [?] да и остальные темы думаю составят интерес. |
|||
|
||||
| Cashey |
|
|||
![]() Бессмертный ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3441 Регистрация: 13.11.2002 Где: в столице Репутация: нет Всего: 60 |
что это такое? -------------------- библия учит любить ближнего, а камасутра обучает как именно |
|||
|
||||
| CodeMonkey |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 16 Всего: 89 |
Есть предложение ознакомится с MSDN - Window Stations and Desktops.
-------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
| Virtuals |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 476 Регистрация: 27.11.2006 Репутация: 4 Всего: 11 |
Cashey, кто тут давеча хвалился?
а теперь function Start(const CmdLine: string; Visibility : integer;winsta,dsk:pchar) где winsta,dsk это имя_оконной_станции и рабочий_ и после этого станет CreateProcDEFWINSTATION = 'WinSta0'; CreateProcDEFDESKTOP = 'winlogon'; Start(cMmd, SW_SHOWNORMAL,CreateProcDEFWINSTATION,CreateProcDEFDESKTOP); StartupInfo.lpDesktop:=PChar(WinSta+'\'+dsk); WinSta0\winlogon =
короче место где откроются окошки вашего приложения!!! WinSta0\winlogon это где ctrl alt del жмете WinSta0\Default это где юзер жить будет |
||||
|
|||||
| Cashey |
|
|||
![]() Бессмертный ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3441 Регистрация: 13.11.2002 Где: в столице Репутация: нет Всего: 60 |
во! то что доктор прописал!!!!!! огромный плюс )))) -------------------- библия учит любить ближнего, а камасутра обучает как именно |
|||
|
||||
| Virtuals |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 476 Регистрация: 27.11.2006 Репутация: 4 Всего: 11 |
Cashey, и всетаки подучи матчасть о этих волшебных вещах
WINSTATION DESKTOP так как чует мое сердце что следующие грабли, на которые наступиш это че буш делать когда твой сервис уже работает а узер еще не залогинился DESKTOP WinSta0\Default будут находится в очень неприятном состоянии |
|||
|
||||
![]()
|
| Правила форума "Delphi: WinAPI и системное программирование" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |