Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
4-1134133839
Beta
2005-12-09 16:10
2006.02.26
Опредление системы


3-1136286352
greg123
2006-01-03 14:05
2006.02.26
чем отличаются FireBird, IB, Yaffil


1-1137868399
sco
2006-01-21 21:33
2006.02.26
Свойства программы в виде дерева


2-1139488132
sanich
2006-02-09 15:28
2006.02.26
Как заставить TDbf создавать нужное поле?


2-1139229210
webpauk
2006-02-06 15:33
2006.02.26
Описание структуры





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский