Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 22.05.2013, 21:02
Аватар для alexusankov
alexusankov alexusankov вне форума
Новичок
 
Регистрация: 27.08.2012
Сообщения: 78
Версия Delphi: C++/Delphi 2010
Репутация: 10
По умолчанию Господа, а пролейте свет на написание служб!

Здравствуйте! Возникла необходимость, написать службу. Вроде все получается, но, есть парочку вопросов. Суть дела - есть хорошая программа, (назовем ее Софтина), научил ее работать самостоятельно. Исходников к ней нету, но мне на данный момент нужно ее просто запустить, и дело в шляпе. Суть в том, чтобы запустить ее по расписанию, без логина юзера в системе. То бишь - как службу.
Сделал я вот что - написал на Delphi службу, со свистелками и всем для меня необходимым, и довольно хитрым расписанием. По моей задумке - моя служба должна просто запускать эту "Софтину", 10 минут держать в работе, и после - убивать.
А с последним трудности. Службу написать то я написал, но как работают сервисы Win, совершенно не имею представления... Если моя служба попытается запустить "Софтину" - что произойдет? Ведь Софтина, пока еще не служба.
1. Может ли служба запустить программу? (без логина в системе).
2. Если не сможет - я поюзаю утилиты, и запущу Софтину , как службу.
Собственно вопросы :
Приведите пожалуйста пару примеров, а именно - как запустить и как убить сторонний EXE из Delphi, или же - приведите пару примеров, как запустить, и остановить службу ?
Думаю, вы меня поняли))) Заранее спасибо
Ответить с цитированием
  #2  
Старый 22.05.2013, 21:10
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Код:
{Эта небольшая функция закрывает приложения, соответствующие заданному имени .exe. 
Пример: KillTask('notepad.exe'); 
            KillTask('iexplore.exe'); } 

uses 
Tlhelp32, Windows, SysUtils; 

function KillTask(ExeFileName: string): integer; 
 const    PROCESS_TERMINATE=$0001; 
var 
 ContinueLoop: BOOL; 
 FSnapshotHandle: THandle; 
 FProcessEntry32: TProcessEntry32; 
begin 
 Result:= 0; 
 FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); 
 FProcessEntry32.dwSize := Sizeof(FProcessEntry32); 
 ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32); 

 while integer(ContinueLoop) <> 0 do 
  begin 
   if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = 
       UpperCase(ExeFileName)) 
    or (UpperCase(FProcessEntry32.szExeFile) = 
        UpperCase(ExeFileName))) then 
     Result := Integer(TerminateProcess(OpenProcess( 
                       PROCESS_TERMINATE, BOOL(0), 
                       FProcessEntry32.th32ProcessID), 0)); 
   ContinueLoop := Process32Next(FSnapshotHandle, 
                                 FProcessEntry32); 
end; 
CloseHandle(FSnapshotHandle); 
end;
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
alexusankov (22.05.2013)
  #3  
Старый 22.05.2013, 21:21
Аватар для alexusankov
alexusankov alexusankov вне форума
Новичок
 
Регистрация: 27.08.2012
Сообщения: 78
Версия Delphi: C++/Delphi 2010
Репутация: 10
По умолчанию

Это гуд. А как быть с вопросами возможности запуска EXE службой (в фоне).
И запуск стороннего ехе?
Ответить с цитированием
  #4  
Старый 22.05.2013, 21:56
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

У розыча пример видел, там брался "токен (или контекст, не помню точно как эта фигня зовется) текушего юзера" и как-то там запускалось под ним. См. сайт Александра Rouse Багеля.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #5  
Старый 23.05.2013, 10:05
Аватар для alexusankov
alexusankov alexusankov вне форума
Новичок
 
Регистрация: 27.08.2012
Сообщения: 78
Версия Delphi: C++/Delphi 2010
Репутация: 10
По умолчанию

Вроде разобрался.
Но тем не менее я не понимаю, когда служба запускает оконное приложение - где оно работает то?
Десктопа то нету
MADMAN - у Багеля раскрывается тема, как службой отправить ShowMessage на рабочий стол текущего пользователя.
А мне пользователи не нужны. Я хочу 'Софтину' запускать с помощью своей службы, когда никто в систему не зашел

Последний раз редактировалось alexusankov, 23.05.2013 в 10:47.
Ответить с цитированием
  #6  
Старый 23.05.2013, 10:56
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Дак запускать тоже от имени пользователя надо, иначе софтина под системом запустится (если там ГУЙ, то не увидишь ничего на мониторе).
В примере розыча, там идет запуск самого же себя, только с параметрами.

Ну софтину можно запускать (всякие шедулеры, мониторы), если там с рабочим столом никакого взаимодействия не будет.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение:
alexusankov (23.05.2013)
  #7  
Старый 23.05.2013, 11:00
Аватар для alexusankov
alexusankov alexusankov вне форума
Новичок
 
Регистрация: 27.08.2012
Сообщения: 78
Версия Delphi: C++/Delphi 2010
Репутация: 10
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
Дак запускать тоже от имени пользователя надо, иначе софтина под системом запустится (если там ГУЙ, то не увидишь ничего на мониторе).
В примере розыча, там идет запуск самого же себя, только с параметрами.

Ну софтину можно запускать (всякие шедулеры, мониторы), если там с рабочим столом никакого взаимодействия не будет.
Так ничего и не нужно. Там самопальная софтина, цепляется на COM порт, запиливает 860 циклов чтения, кладет все в SQL, и говорит - все хозяин, все прочитано. Гуй от нее и не требуется, я переписал ей процедуры, она стартует и сразу знает что ей делать. переписал бы ее всю, но предыдущий автор не захотел делиться протоколами. Своя там специфика.
Суть то как раз в том, чтобы она без захода пользователя ночью, снимала все данные.
А для просмотра полученных данных, из SQL с ними уже номальное приложение работает.
P.s. значит, я так понимаю, она запускается под неким системным профилем, и у них там свой рабочий стол грубо говоря.
Ответить с цитированием
  #8  
Старый 23.05.2013, 11:31
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Скорее его [рабочего стола] отсутствие.

Ну если прога без ГУЙя, то все, CreateProcess и фпирёт.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #9  
Старый 23.05.2013, 11:37
Аватар для alexusankov
alexusankov alexusankov вне форума
Новичок
 
Регистрация: 27.08.2012
Сообщения: 78
Версия Delphi: C++/Delphi 2010
Репутация: 10
По умолчанию

У софтины то, есть ГУЙ.
Я просто нужные действия, button.click()'и, и нужные параметры полей переписал в OnShow(), и теперь для ее работы ее надо просто запустить. И убить через 10 минут.
А ГУЙ то у нее есть. Бесполезный, но есть ;-)
P.s.
Про CreateProcess - незнаком.
Сделал
Код:
ShellExecute(GETGESKTOPWINDOW,'OPEN','c:\start.exe',nil,nil,SW_SHOWNORMAL);
С ВинАПИ тоже не особо знаком, но почему то мой сервис ругался на HANDLE, поэтому гугл рекомендовал мне GETGESKTOPWINDOW.

Последний раз редактировалось alexusankov, 23.05.2013 в 11:42.
Ответить с цитированием
  #10  
Старый 23.05.2013, 11:43
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Цитата:
Сообщение от alexusankov
Про CreateProcess - незнаком.
http://www.sql.ru/forum/273134/zapus...-createprocess

Нельзя приложения с ГЕЙем из сервиса запускать (не, ну можно, но только в XP).
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #11  
Старый 23.05.2013, 11:47
Аватар для alexusankov
alexusankov alexusankov вне форума
Новичок
 
Регистрация: 27.08.2012
Сообщения: 78
Версия Delphi: C++/Delphi 2010
Репутация: 10
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
http://www.sql.ru/forum/273134/zapus...-createprocess

Нельзя приложения с ГЕЙем из сервиса запускать (не, ну можно, но только в XP).
Так, на XР и работаем.
А CreateProcess'ом можно будет запускать везде?
Ответить с цитированием
  #12  
Старый 23.05.2013, 12:26
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Пардоньте, с ГУЙем, а не ГЕЙем
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:31.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter