Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
| | |
Попробуй ShellExecute 04.07.02 21:52 Число просмотров: 1123
Автор: HandleX <Александр М.> Статус: The Elderman
|
> Это как-то избыточно. :) Я почти не знаком с написанием В общем-то, немного да.
> интерфейсов и необходимость передавать в функцию windows Нет там никаких интефейсов. Системный стандартный вызов функции из библиотеки Shell32.dll, и выглядит примерно так (я пишу на Delphi):
ShellExecute(0, 'open', 'C:\WINNT\notepad.exe', Nil, Nil, SW_SHOW);
> handle меня откровенно затрудняет. Он может быть нулевым > (NULL )? В твоём случае он ДОЛЖЕН быть нулевым ;-)))
Удачи!
|
<programming>
|
[Win32] Сервис не запускает апликацию 26.06.02 11:02
Автор: bronf Статус: Незарегистрированный пользователь
|
На ХР мой сервис не может запустить аппликацию(обычный CreateProcess). Апликация при старте показывает небольшое окно и минимизируется. При попытке запуска сервиса апликация запускается на долю секунды и тут же прекращается, а система выдает сообщение:The service on Local computer started and then stopped. Some services stop automatically if they have no work to do, for example, the Perfomance Logs and Alerts service. Понятно, что проблема в необходимости интеракции с Desktop, но что с этим делать?
|
|
[Win32] Сервис не запускает апликацию 26.06.02 17:55
Автор: IgorR <Igor Razin> Статус: Member
|
Под 2000 нормально запускается. Ставлю в свойствах Allow service to interact with desktop и телемаркет.
А вообще, по-хорошему, сервис не должен взаимодействовать с десктопом.
|
|
[Win32] Сервис не запускает апликацию 26.06.02 16:51
Автор: cb <cb> Статус: Member
|
А сервис интерактивный (SERVICE_INTERACTIVE_PROCESS)?
cb.
|
| |
[Win32] Сервис не запускает апликацию 27.06.02 11:36
Автор: bronf Статус: Незарегистрированный пользователь
|
> А сервис интерактивный (SERVICE_INTERACTIVE_PROCESS)? > > cb. Нет. Да и не должен по идее. Все, что он делает - это запускает аппликацию. Сервис хранит ее Pointer to PROCESS_INFORMATION structure и при закрытии сервиса выполняет TerminateProcess. Это работает под Win2000 и в debug ( из console) под ХР. Похоже я просто чего-то не доопределяю в CreateProcess:
CreateProcess( NULL, strzCommandLine, NULL, NULL, FALSE, 0, NULL,
NULL, &si, &g_pi )
|
| | |
[Win32] Сервис не запускает апликацию 27.06.02 12:07
Автор: cb <cb> Статус: Member
|
> Нет. Да и не должен по идее. Все, что он делает - это > запускает аппликацию. Сервис хранит ее Pointer to > PROCESS_INFORMATION structure и при закрытии сервиса > выполняет TerminateProcess. Это работает под Win2000 и в > debug ( из console) под ХР. Похоже я просто чего-то не > доопределяю в CreateProcess: > CreateProcess( NULL, strzCommandLine, NULL, NULL, FALSE, > 0, NULL, > NULL, &si, &g_pi )
я делаю точно также, только сервис интерактивный - все работает..
сделай сервис интерактивным (хотя бы для теста) и посмотри заработает или нет, а потом уж можно подумать как проделать такое из неинтерактивного сервиса...
cb.
|
| | | |
[Win32] Сервис не запускает апликацию 27.06.02 18:51
Автор: bronf Статус: Незарегистрированный пользователь
|
Похоже, проблема не в интерактивности. Сама аппликация падает и пишет в Event Viewer сообщение о невозможности загрузить что-то из environment.
|
| | | | |
[Win32] Сервис не запускает апликацию 28.06.02 10:21
Автор: SerpentFly <Vadim Smirnov> Статус: Member
|
Когда у тебя интерактивный сервис он запускается на \\Windows\WindowStations\WinSta0 (случаи с терминальными сервисами и прочими извратами с созданием всяческих расширений не рассматриваем) и соответсвенно все процессы им созданные запускаются там же. Это как раз та windows station к которой привязан тот десктоп(ы) который ты видишь.
Если сервис не интерактивный, то он работает на \\Windows\WindowStations\Service-0x0-3e7$, как и все процессы им порожденные (без дополнительных ухищрений). Так что вывод своего вновь порожденного процесса ты в принципе не увидишь, так как он будет работать на window station десктоп(ы) которой ты просто не видишь (если он там вообще существует, сейчас лениво проверять)... Не исключено что запустившись в таких необычных условиях твое приложение и валиться...
|
| | | | | |
[Win32] Сервис не запускает апликацию 03.07.02 15:45
Автор: bronf Статус: Незарегистрированный пользователь
|
При создании сервиса нужно этот десктоп аллоцировать или это происходит по умолчанию?
Если я просто пишу в CreateService(.., SERVICE_WIN32_OWN_PROCESS|SERVICE_INTERACTIVE_PROCESS, .. - этого достаточно для создания интерактивного сервиса или требуется еще что-то?
> Когда у тебя интерактивный сервис он запускается на > \\Windows\WindowStations\WinSta0 (случаи с терминальными > сервисами и прочими извратами с созданием всяческих > расширений не рассматриваем) и соответсвенно все процессы > им созданные запускаются там же. Это как раз та windows > station к которой привязан тот десктоп(ы) который ты > видишь.
|
| | | | | | |
[Win32] Сервис не запускает апликацию 03.07.02 16:42
Автор: SerpentFly <Vadim Smirnov> Статус: Member
|
> При создании сервиса нужно этот десктоп аллоцировать или > это происходит по умолчанию? > Если я просто пишу в CreateService(.., > SERVICE_WIN32_OWN_PROCESS|SERVICE_INTERACTIVE_PROCESS, .. - > этого достаточно для создания интерактивного сервиса или > требуется еще что-то?
Достаточно. Вообще можно просто поправить ключик твоего сервиса в реестре ;-)
|
| | | | | | | |
[Win32] Сервис не запускает апликацию 03.07.02 19:57
Автор: bronf Статус: Незарегистрированный пользователь
|
Тогда ерунда какая-то получается: из консоли аппликация запускается и работает, а из-под сервиса - нет!
> > При создании сервиса нужно этот десктоп аллоцировать > или > > это происходит по умолчанию? > > Если я просто пишу в CreateService(.., > > SERVICE_WIN32_OWN_PROCESS|SERVICE_INTERACTIVE_PROCESS, > .. - > > этого достаточно для создания интерактивного сервиса > или > > требуется еще что-то? > > Достаточно. Вообще можно просто поправить ключик твоего > сервиса в реестре ;-)
|
| | | | |
А ты всё-таки попробуй. Похоже, проблема в твоём сервисе. И ещё — 28.06.02 06:34
Автор: HandleX <Александр М.> Статус: The Elderman
|
есть рульная программа, называется SrvAny, отлажена и работает у всех уже много лет. Попробуй запусти свою "аппликацию" под ним ;-)))))))))
Этим определишь, что конкретно у тебя не работает.
|
| | | | | |
А ты всё-таки попробуй. Похоже, проблема в твоём сервисе. И ещё — 03.07.02 09:25
Автор: bronf Статус: Незарегистрированный пользователь
|
> есть рульная программа, называется SrvAny, отлажена и > работает у всех уже много лет. Попробуй запусти свою > "аппликацию" под ним ;-))))))))) > Этим определишь, что конкретно у тебя не работает. В сервисе у меня не хватало цикла ожидания в функции EntryPoint (собственно выполнение сервисом полезной деятельности). Теперь сервис запускается (хотя, как ни странно, под 2000 он и раньше нормально вроде отрабатывал), однако "аппликация" пишет в EventViewer сообщение об ошибке"function ncsy_basenv_init returns = '-11' " . В debug (concole) выполняется. Что такого нет у сервиса, что есть у консоли? :)
Что такое SrvAny и где ее можно взять?
|
| | | | | | |
Про SrvAny и не только 04.07.02 21:42
Автор: HandleX <Александр М.> Статус: The Elderman
|
> В сервисе у меня не хватало цикла ожидания в функции > EntryPoint (собственно выполнение сервисом полезной > деятельности). Теперь сервис запускается (хотя, как ни > странно, под 2000 он и раньше нормально вроде отрабатывал), > однако "аппликация" пишет в EventViewer сообщение об > ошибке"function ncsy_basenv_init returns = '-11' " . В > debug (concole) выполняется. Что такого нет у сервиса, что > есть у консоли? :) > Что такое SrvAny и где ее можно взять?
SrvAny.exe это такая программа... Она есть сервис, и запускает любую другую прога, которую нужно указать в параметрах. Впрочем, вот ссылка —
<A HREF=ftp://ftp.uni-stuttgart.de/pub/systems/winnt/reskit/i386/srvany_x86.exe target=_top>.
Посмотри, запускается ли твоя прога под этим сервисом. Попробуй указать флаг, что это интерактивный сервис, поскольку твоя прога консольная и поэтому будет пытаться создать дескриптор консоли, который взаимодействовует c WindowStation, которая в неинтерактивном сервисе может не подойти твоей проге ;-)) Ты на чём пишешь? У меня есть отлаженный код сервиса, который "тикает" через равные промежутки времени. Имеет возможность паузы. Сам себя устанавливает\удаляет. Размер получающегося EXE ~ 20k. Могу поделиться :-))))))))))
|
|
Попробуй ShellExecute 26.06.02 14:13
Автор: йцукенг <jcukeng> Статус: Member
|
|
| |
Попробуй ShellExecute 03.07.02 15:50
Автор: bronf Статус: Незарегистрированный пользователь
|
Это как-то избыточно. :) Я почти не знаком с написанием интерфейсов и необходимость передавать в функцию windows handle меня откровенно затрудняет. Он может быть нулевым (NULL )?
|
| | |
Попробуй ShellExecute 04.07.02 21:52
Автор: HandleX <Александр М.> Статус: The Elderman
|
> Это как-то избыточно. :) Я почти не знаком с написанием В общем-то, немного да.
> интерфейсов и необходимость передавать в функцию windows Нет там никаких интефейсов. Системный стандартный вызов функции из библиотеки Shell32.dll, и выглядит примерно так (я пишу на Delphi):
ShellExecute(0, 'open', 'C:\WINNT\notepad.exe', Nil, Nil, SW_SHOW);
> handle меня откровенно затрудняет. Он может быть нулевым > (NULL )? В твоём случае он ДОЛЖЕН быть нулевым ;-)))
Удачи!
|
| | | |
Попробуй ShellExecute 08.07.02 10:41
Автор: bronf Статус: Незарегистрированный пользователь
|
Это все работает, но программа (не сервис!) по-прежнему падает. Так как писали ее не у нас и что ей нужно неизвестно - продолжать этим заниматься смысла не имеет. Нужно им написать суровое письмо. :)
За помощь большое спасибо.
> > Это как-то избыточно. :) Я почти не знаком с > написанием > В общем-то, немного да. > > интерфейсов и необходимость передавать в функцию > windows > Нет там никаких интефейсов. Системный стандартный вызов > функции из библиотеки Shell32.dll, и выглядит примерно так > (я пишу на Delphi): > ShellExecute(0, 'open', 'C:\WINNT\notepad.exe', Nil, Nil, > SW_SHOW); > > handle меня откровенно затрудняет. Он может быть > нулевым > > (NULL )? > В твоём случае он ДОЛЖЕН быть нулевым ;-))) > Удачи!
|
|
|