![]()  | 
	
 
  | 
		
			
  | 	
	
	
		
		|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны | 
![]()  | 
	
	
| 
		 | 
	Опции темы | Поиск в этой теме | Опции просмотра | 
| 
		 
			 
			#1  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Здравствуйте! Возникла необходимость, написать службу. Вроде все получается, но, есть парочку вопросов. Суть дела - есть хорошая программа, (назовем ее Софтина), научил ее работать самостоятельно. Исходников к ней нету, но мне на данный момент нужно ее просто запустить, и дело в шляпе. Суть в том, чтобы запустить ее по расписанию, без логина юзера в системе. То бишь - как службу. 
		
	
		
		
		
		
		
	
		
		
	
	
	Сделал я вот что - написал на Delphi службу, со свистелками и всем для меня необходимым, и довольно хитрым расписанием. По моей задумке - моя служба должна просто запускать эту "Софтину", 10 минут держать в работе, и после - убивать. А с последним трудности. Службу написать то я написал, но как работают сервисы Win, совершенно не имею представления... Если моя служба попытается запустить "Софтину" - что произойдет? Ведь Софтина, пока еще не служба. 1. Может ли служба запустить программу? (без логина в системе). 2. Если не сможет - я поюзаю утилиты, и запущу Софтину , как службу. Собственно вопросы : Приведите пожалуйста пару примеров, а именно - как запустить и как убить сторонний EXE из Delphi, или же - приведите пару примеров, как запустить, и остановить службу ? Думаю, вы меня поняли))) Заранее спасибо  | 
| 
		 
			 
			#2  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Код: 
	{Эта небольшая функция закрывает приложения, соответствующие заданному имени .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  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Это гуд. А как быть с вопросами возможности запуска EXE службой (в фоне). 
		
	
		
		
		
		
		
	
		
		
	
	
	И запуск стороннего ехе?  | 
| 
		 
			 
			#4  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 У розыча пример видел, там брался "токен (или контекст, не помню точно как эта фигня зовется) текушего юзера" и как-то там запускалось под ним. См. сайт Александра Rouse Багеля. 
		
	
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#5  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Вроде разобрался. 
		
	
		
		
		
		
		
		
			Но тем не менее я не понимаю, когда служба запускает оконное приложение - где оно работает то? Десктопа то нету MADMAN - у Багеля раскрывается тема, как службой отправить ShowMessage на рабочий стол текущего пользователя. А мне пользователи не нужны. Я хочу 'Софтину' запускать с помощью своей службы, когда никто в систему не зашел Последний раз редактировалось alexusankov, 23.05.2013 в 10:47.  | 
| 
		 
			 
			#6  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Дак запускать тоже от имени пользователя надо, иначе софтина под системом запустится (если там ГУЙ, то не увидишь ничего на мониторе). 
		
	
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	В примере розыча, там идет запуск самого же себя, только с параметрами. Ну софтину можно запускать (всякие шедулеры, мониторы), если там с рабочим столом никакого взаимодействия не будет.  | 
| Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение: | ||
 
alexusankov (23.05.2013)
  | ||
| 
		 
			 
			#7  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Цитата: 
	
 Суть то как раз в том, чтобы она без захода пользователя ночью, снимала все данные. А для просмотра полученных данных, из SQL с ними уже номальное приложение работает. P.s. значит, я так понимаю, она запускается под неким системным профилем, и у них там свой рабочий стол грубо говоря.  | 
| 
		 
			 
			#8  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Скорее его [рабочего стола] отсутствие. 
		
	
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	Ну если прога без ГУЙя, то все, CreateProcess и фпирёт.  | 
| 
		 
			 
			#9  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 У софтины то, есть ГУЙ. 
		
	
		
		
		
		
		
		
			Я просто нужные действия, button.click()'и, и нужные параметры полей переписал в OnShow(), и теперь для ее работы ее надо просто запустить. И убить через 10 минут. А ГУЙ то у нее есть. Бесполезный, но есть ;-) P.s. Про CreateProcess - незнаком. Сделал Код: 
	ShellExecute(GETGESKTOPWINDOW,'OPEN','c:\start.exe',nil,nil,SW_SHOWNORMAL); Последний раз редактировалось alexusankov, 23.05.2013 в 11:42.  | 
| 
		 
			 
			#10  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Цитата: 
	
 Нельзя приложения с ГЕЙем из сервиса запускать (не, ну можно, но только в XP).  | 
| 
		 
			 
			#11  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Цитата: 
	
 А CreateProcess'ом можно будет запускать везде?  | 
| 
		 
			 
			#12  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Пардоньте, с ГУЙем, а не ГЕЙем  
		
	
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	![]()  |