Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Запуск программы из сервиса [D7]


Страницы:   1 2

kaginava ©   (2006-05-26 09:21:00) 

Добрый всем день!!
Пытаюсь из сервиса запустить программу
pinfo : PROCESS_INFORMATION;
 si :STARTUPINFO;
 begin
ZeroMemory(@si,sizeof(si));
si.cb:=SizeOf(si);
CreateProcess(nil,PChar('c:\program files\The Bat!\thebat.exe'),
                    nil, nil,
                    false,
                    0, nil,
                    nil,si,
                    pinfo);

ничего не происходит , с этим же кодом из обычной программы все получается , подскажите кто нибудь как запустить программу из сервиса. Причем сам сервис рабртает проверял , писал лог из него а CreateProcess не работает..


tesseract   (2006-05-26 12:46:00) [1]

да нет это при создании сервиса.  см MSDN


kaginava   (2006-05-26 12:38:00) [2]


> ServiceStatus.dwServiceType:=SERVICE_INTERACTIVE_PROCESS
> or SERVICE_WIN32_OWN_PROCESS;

это в свойствах процесса указать надо ? при создании ?


tesseract   (2006-05-26 12:10:00) [3]


> Разрешить сервису взаимодействовать с рабочим столом


В смысле интерактивным его сделать?

ServiceStatus.dwServiceType:=SERVICE_INTERACTIVE_PROCESS or SERVICE_WIN32_OWN_PROCESS;


Игорь Шевченко   (2006-05-26 11:44:00) [4]


> а как его наружу вытащить ?


Разрешить сервису взаимодействовать с рабочим столом


kaginava   (2006-05-26 11:34:00) [5]

Прошу всех извинить ,  посмотрел в процессах Bat запускается но его не видно ни одного окна , а в списке процессов все время появляются новые , а как его наружу вытащить ?


kaginava   (2006-05-26 11:12:00) [6]

поменял , все по прежнему.....


tesseract   (2006-05-26 11:05:00) [7]

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

Пример MSDN


void main( VOID )
{
   STARTUPINFO si;
   PROCESS_INFORMATION pi;

   ZeroMemory( &si, sizeof(si) );
   si.cb = sizeof(si);
   ZeroMemory( &pi, sizeof(pi) );

   // Start the child process.
   if( !CreateProcess( NULL, // No module name (use command line).
       "MyChildProcess", // Command line.
       NULL,             // Process handle not inheritable.
       NULL,             // Thread handle not inheritable.
       FALSE,            // Set handle inheritance to FALSE.
       0,                // No creation flags.
       NULL,             // Use parent's environment block.
       NULL,             // Use parent's starting directory.
       &si,              // Pointer to STARTUPINFO structure.
       &pi )             // Pointer to PROCESS_INFORMATION structure.
   )
   {
       ErrorExit( "CreateProcess failed." );
   }

   // Wait until child process exits.
   WaitForSingleObject( pi.hProcess, INFINITE );

   // Close process and thread handles.
   CloseHandle( pi.hProcess );
   CloseHandle( pi.hThread );
}
If CreateProcess succeeds


Сергей М.   (2006-05-26 10:58:00) [8]


> MessageBox не вижу но и Bat не запустился


Раз не видишь, значит, запустился.
Нажми ALT-CTRL-DEL и убедись, что Bat присутствует в списке процессов.


kaginava   (2006-05-26 10:47:00) [9]

Да [6] выполнил , MessageBox не вижу но и Bat не запустился


Сергей М.   (2006-05-26 10:42:00) [10]


> kaginava   (26.05.06 10:34) [10]


Ты [6] выполнил ?
MessageBox видишь ?
Если не видишь, значит процесс успешно создан. Иначе в сообщении об ошибке увидишь краткое описание причины отказа.


unknown   (2006-05-26 10:41:00) [11]

А если в кавычки путь взять?
PChar(' "c:\program files\The Bat!\thebat.exe "')


kaginava   (2006-05-26 10:41:00) [12]

Интерестно что сод завершения CreateProcess нормальный, т.е.
По условию
if not CreateProcess(....)
then MessageBox(.....)

ничего не выдается ....


kaginava   (2006-05-26 10:34:00) [13]

сервис запущен с системным аккаунтом, пробовал ему права админа давать ..результат тотже


wal   (2006-05-26 10:30:00) [14]

С каким аккаунтом сервис запущен? И есть ли у этого аккаунта права доступа к нужной папке?


Сергей М.   (2006-05-26 10:22:00) [15]

см. [6]


kaginava   (2006-05-26 10:12:00) [16]

что же за модуль ему нужен....? главное из обичной программы по нажатию кнопки все запускается ...
собственно у меня задача перезапускать The Bat если пользователь его случайно закрыл ...., можкт по другому можно как нибудь ?


Сергей М.   (2006-05-26 10:12:00) [17]

if  not CreateProcess(..) then
 MessageBox(0, PChar(SysErrorMessage(GetLastError)), '', mb_ok);


Сергей М.   (2006-05-26 10:07:00) [18]

{ The specified module could not be found. }
 ERROR_MOD_NOT_FOUND = 126;


kaginava   (2006-05-26 10:07:00) [19]

да с рабочим столом ему в настройка разрешил взаимоействовать , MessageBox по крайней мере рабртает


kaginava   (2006-05-26 10:05:00) [20]

вроде 126 GetLastError возвращает


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо