Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.02.26;
Скачать: CL | DM;

Вниз

Есть какие-то проблемы с запуском программ из сервайса?   Найти похожие ветки 

 
Aleksandr.   (2006-01-24 16:55) [0]

Сервисное приложение выполняет ShellExecute(0,nil,"C:\test.exe",nil,nil, SW_ShowNormal), результат 42, то есть, если я правильно понял документацию, выше 32 - функция отработала успешно. Но при этом никакого запуска приложения на самом деле не происходит. Может, из сервайса это надо делать иначе?


 
Digitman ©   (2006-01-24 17:12) [1]


> при этом никакого запуска приложения на самом деле не происходит


с чего ты взял ?


 
atruhin ©   (2006-01-24 20:40) [2]

Возможно запускается, но на другом десктопе.


 
sniknik ©   (2006-01-24 20:54) [3]

сервису надо разрешить работать с десктопом, а программистам которые пишут сервисы работающие с десктопом надо запретиь приближатся к компам ближе чем на 3 мили... ;)

p.s. не уверен, но вроде читал, что это в новой винде (что там после XP?) запретят, сервис это не приложение для юзера...


 
Набережных С. ©   (2006-01-24 21:07) [4]

Однако же запустить приложеник из сервиса на интерактивном десктопе можно. И в WinXP это совсем просто:)


 
Набережных С. ©   (2006-01-24 21:10) [5]

[4]  - в смысле, из неинтерактивного сервиса.


 
Eraser ©   (2006-01-24 21:24) [6]


> sniknik ©   (24.01.06 20:54) [3]

а что делать программам для удалённого администрироваения, к примеру...?
там без доступа к десктопу никак...


 
sniknik ©   (2006-01-24 21:31) [7]

> в смысле, из неинтерактивного сервиса.
под w2k тоже несложно (не особо. 100 строк кода всего ;о))


 
sniknik ©   (2006-01-24 21:32) [8]

> а что делать программам для удалённого администрироваения, к примеру...?
а я почем знаю?


 
Набережных С. ©   (2006-01-24 21:51) [9]


> sniknik ©   (24.01.06 21:31) [7]

Ну не то, чтобы сложно, но и не совсем просто.

> 100 строк кода всего ;о))

Сколько строк я уж не помню, но, по-моему меньше сотни:)


 
sniknik ©   (2006-01-24 22:06) [10]

> Сколько строк я уж не помню, но, по-моему меньше сотни:)
тоже не помню, но посмотрел... (под рукой)  114 строк модуль, вместе с пустыми строками и коментариями (если мы вообще об одном и том же примере говорим ;) "ужать" до "чистого" кода, да еще без форматирования... строк в 10 наверное можно уложится ;о))


 
Набережных С. ©   (2006-01-24 22:14) [11]


> sniknik ©   (24.01.06 22:06) [10]


>если  мы вообще об одном и том же примере говорим ;)

Не знаю:)) Я о том, который я тут выкладывал года 2-3 назад. Помнится, написан был на скорую руку, наверняка можно было оптимальнее, но и так, вроде, не очень большой был. Хотя может и забылось уже. А ты о каком?:))


 
sniknik ©   (2006-01-24 22:27) [12]

я скачивал с борланда, с раздела девелоперов.
> Author: Sasan Adami (s.adami@gmx.net) - aug 2003  

и насколько понимаю, вроде, ничего лишнего в нем нет. сократить можно, но не сильно (в основном за счет 18 строчного коментария-заголовка ;)).


 
Rouse_ ©   (2006-01-24 22:31) [13]


> сервису надо разрешить работать с десктопом, а программистам
> которые пишут сервисы работающие с десктопом надо запретиь
> приближатся к компам ближе чем на 3 мили... ;)

Коль, хотел бы я посмотреть на тебя, когда перед тобой встанет задача реализовать транспорт на асинхронных сокетах в сервисе :) Если вдруг такая необходимость возникнет, вспомни свои слова и посмейся :)


 
sniknik ©   (2006-01-24 22:47) [14]

> хотел бы я посмотреть на тебя, когда перед тобой встанет задача реализовать транспорт на асинхронных сокетах в
> сервисе :)
приезжай смотри. ;о)) примерно такая задача именно сейчас у меня и стоит. ;)

не совсем конечно, но тоже транспорт, события от устройства надо в сеть транслировать, с "небольшим" анализом. и именно в сервисе, а сервис под NT (под W2k/XP устройство не работает, и не от нас это зависит).
и я конечно пользуюсь десктопом... на время отладки. в рабочем варианте взаимодействия не будет (ИМХО правильно).


 
Rouse_ ©   (2006-01-24 22:52) [15]


> и я конечно пользуюсь десктопом... на время отладки. в рабочем
> варианте взаимодействия не будет (ИМХО правильно).

Именно асинхронный или всежтаки неблокирующий? :) У меня на асинхроннном оконные сообщения (FD_ACCEPT и т.п.) не идут ни в какую без интерактива :)


 
Rouse_ ©   (2006-01-24 22:55) [16]

Ааа, устройство :) Нет тут немного не то... Мне нужен рабочий цикл выборки сообщений, чтоб мое окно (AllocateHWnd) нотификационные мессаги принимало от системы :)


 
Набережных С. ©   (2006-01-24 23:15) [17]


> sniknik ©   (24.01.06 22:27) [12]

Если откопаю свой, то завтра посчитаю, сколько там, ради интереса. А у тебя ссылки нет на этот пример? Любопытно было бы сравнить:)


 
Aleksandr.   (2006-01-24 23:18) [18]


> Digitman ©   (24.01.06 17:12) [1]
>
>
> > при этом никакого запуска приложения на самом деле не
> происходит
>
>
> с чего ты взял ?


Да, сорри, оно запустилось, но в совершенно другой терминальной сессии, тоже административной, как и та, в которой сервайс был запущен. Просто тогда возникает вопрос, почему сессии оказались разными и как их "синхронизировать".
Не понимаю, кстати, почему подняли тему про интерактивность и про десктопы - сервайс-то примитивный и без интерактивности - всего лишь ловит броадкаст по юдп, проверяет, послан ли он этому компьютеру и запускает заданное приложение.


 
sniknik ©   (2006-01-25 00:17) [19]

Rouse_ ©   (24.01.06 22:52) [15]
> У меня на асинхроннном оконные сообщения (FD_ACCEPT и т.п.) не идут ни в какую без интерактива :)
т.е. событий вообще нет, или только этих конкретных? я пробовал с Indy на прием (посылка понятно без проблем в принципе) работало, и без интерактивности. или это не то? но там тоже события приходят/обрабатываются от асинхронности не зависит. (делать асинхронным смысла не вижу, все одно оно в отдельном потоке, и с друим взаиможействовать/синхронизироваться не надо)

Набережных С. ©   (24.01.06 23:15) [17]
> А у тебя ссылки нет на этот пример? Любопытно было бы сравнить:)
ссылки нет. но если хочеш вышлю, пример то есть. мыло только дай, можеш свой прислать, может действительно что координально различается.

> Не понимаю, кстати, почему подняли тему про интерактивность и про десктопы - сервайс-то примитивный и
> без интерактивности - всего лишь ловит броадкаст по юдп, проверяет, послан ли он этому компьютеру и запускает заданное
> приложение.
а ты проверь, поставь интерактивность у сервиса, и главное убедись броадкаст пакеты то приходят (?), оно хоть пытается запустится (?).
а подняли потому, что сбособ старта в [0] не будет адекватно без этого работать.


 
Набережных С. ©   (2006-01-25 06:57) [20]

Вышли пожалуйста, сюда: naberegnyhs на rambler.ru. Свой я вчера нашел, но, оказалось, я с ним потом еще экспириментировал, так что надо восстанавливать и лишнее выкидывать. Вечером сделаю, пришлю. Там запуск на интерактивном столе от имени интерактивного пользователя.

> пробовал с Indy

Indy, если не ошибаюсь, использует только синхронный режим.

> Rouse_ ©   (24.01.06 22:55) [16]

Странно это. Может, ты не учитываешь, что сообщения не проходят между потоками на разных десктопах?


 
sniknik ©   (2006-01-25 08:32) [21]

> Вечером сделаю, пришлю. Там запуск на интерактивном столе от имени интерактивного пользователя.
да в общем, если затруднительно, то не надо. отпиши только если сильные различия.
послал.

> Indy, если не ошибаюсь, использует только синхронный режим.
ну да. Indy "блокировочник", т.е. он ожидает событий, приходов пакетов из сети и этим ожиданием блокирует поток в котором ждет.
но события то все одно есть, и он их видит, с системы приходят. (иначе бы не работал) вот в [19] я и уточнял, у него все события в сервисе не ловятся или только специфичные для асинхронного режима. в общем можно с этим "поковыряться" ;).

2 Rouse_ ©
если не влом, выдели 2 процедуры/куска кода, одну той что принимаеш в сервисе, другую которой можно послать сообщение для проверки. (чтобы можно было эмулировать твое нерабочее/рабочее при разной интерактивности состояние), и пришли мне.


 
Digitman ©   (2006-01-25 08:51) [22]


> Aleksandr.   (24.01.06 23:18) [18]


А сервис твой стартует от имени какого пользователя ?


 
Rouse_ ©   (2006-01-25 09:22) [23]


> если не влом, выдели 2 процедуры/куска кода, одну той что
> принимаеш в сервисе, другую которой можно послать сообщение
> для проверки. (чтобы можно было эмулировать твое нерабочее/рабочее
> при разной интерактивности состояние), и пришли мне.

Ок, чуть попозже как время будет покоцаю сервис и пришлю...


 
Набережных С. ©   (2006-01-25 12:19) [24]


> sniknik ©   (25.01.06 08:32) [21]

Спасибо, получил и ответил, посмотри почту.

> да в общем, если затруднительно

Да не особо затруднительно, минут на 10-15:)) Просто код дома, а я на работе:))) Если заинтересует, просто напиши, скину.


 
sniknik ©   (2006-01-25 12:31) [25]

позже посмотрю, вечером... просто я тоже сейчас на работе. (какое совпадение ;о), и в общем "немного" занят)


 
Aleksandr.   (2006-01-25 14:55) [26]


> sniknik ©   (25.01.06 00:17) [19]
>
> а ты проверь, поставь интерактивность у сервиса, и главное
> убедись броадкаст пакеты то приходят (?), оно хоть пытается
> запустится (?).
> а подняли потому, что сбособ старта в [0] не будет адекватно
> без этого работать.

Я оставил на ночь шедулер, посылающие броадкасты, и сервайс - просто чтобы писали каждый в лог, что отправлено и что получено. Согласно логам отправки и получения, один в один. То есть каждое сообщение было поймано сервайсом, интерактивность была отключена. И старт происходит без интерактивности.


> Digitman ©   (25.01.06 08:51) [22]
>
>
> > Aleksandr.   (24.01.06 23:18) [18]
>
>
> А сервис твой стартует от имени какого пользователя ?


Ну, если я захожу в терминальную сессию под собой, видимо, от меня. Сервайс я делаю впервые, поэтому немного не ориентируюсь в вопросах.


 
Digitman ©   (2006-01-25 15:01) [27]

Попробуй CreateProcessAtUser() вместо ShellExecute


 
sniknik ©   (2006-01-25 17:05) [28]

> То есть каждое сообщение было поймано сервайсом, интерактивность была отключена.
почемуто ты связываеш две вещи о которых говорилось в разных контекстах... про то что события/пакеты приходят и без интерактивности сомнений нет и не было. (проверка была нужна только потому что ты писал, что по приходу пакета у тебя идет попытка запуска ("оно вообще запускается?"))

> И старт происходит без интерактивности.
а вот в этом как раз и сомнения, что он произойдет (нормально в "видимом" десктопе) по ShellExecute и без интерактивности.

не понимаю к чему рассуждения, трудно поставить галочку и проверить? а вот после того как убедишся что в том случае работает, вот тогда и дальше можно двигатся. (чтобы пришло внутреннее понимание... что все не просто так ;)


 
Aleksandr.   (2006-01-25 17:40) [29]

Спасибо за просвещение, буду двигаться дальше :)


 
kami ©   (2006-01-25 19:10) [30]

Дословная цитата :)

Набережных С. ©   (12.03.05 16:14) [25]

Нашел для XP. Ведь разбирался когда-то, и помню же, что совсем просто должно быть, а вот ведь как заклинило, а:( В общем, схема такая:

function ExecuteOnSession(SessionID: DWORD; const AppName: string): THandle;
var
H: THandle;
SI: TStartupInfo;
PI: TProcessInformation;
begin
Result:=0;
if not WTSQueryUserToken(SessionID, H) then Exit;

try

  FillChar(SI, SizeOf(SI), 0);
  SI.cb:=SizeOf(SI);
  if CreateProcessAsUser(H, nil, "Notepad.exe", nil, nil, false,
                   CREATE_NEW_CONSOLE,  nil, nil, SI, PI) then
  begin
    CloseHandle(PI.hThread);
    Result:=PI.hProcess;
  end;

finally
  CloseHandle(H);
end;
end;

function ExecuteAsIU_XP(const AppName: string): THandle;
var
SessionID: DWORD;
begin
SessionID:=WTSGetActiveConsoleSessionId;
Result:=ExecuteOnSession(SessionID, AppName);
end;


Проверено на XP Pro SP2.

P.S. Да здравствует Пиво - главная движущая сила IT-индустрии!:)))


 
Aleksandr.   (2006-01-25 20:08) [31]

Вау... я за пиффом!



Страницы: 1 вся ветка

Текущий архив: 2006.02.26;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.059 c
9-1125411855
! Han!
2005-08-30 18:24
2006.02.26
Где можно скачать исходники игр?


15-1139080877
Андрейй
2006-02-04 22:21
2006.02.26
Подскажите компонент


1-1138179876
nstur
2006-01-25 12:04
2006.02.26
Excel2000


15-1138780797
Gero
2006-02-01 10:59
2006.02.26
Вышла Optimus Mini


1-1138040948
Klopan
2006-01-23 21:29
2006.02.26
свойство в строку