Форум: "Основная";
Текущий архив: 2006.02.26;
Скачать: [xml.tar.bz2];
ВнизЕсть какие-то проблемы с запуском программ из сервайса? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.067 c