Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.06.11;
Скачать: CL | DM;

Вниз

Запуск программы из сервиса   Найти похожие ветки 

 
kaginava   (2006-05-26 09:21) [0]

Добрый всем день!!
Пытаюсь из сервиса запустить программу
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 не работает..


 
Сергей М. ©   (2006-05-26 09:51) [1]


> CreateProcess не работает


Каков код ошибки, возвращаемый функцией CreateProcess() ?


 
umbra ©   (2006-05-26 10:02) [2]

сервис должен иметь возможность взаимодействовать с рабочим столом.


 
kaginava   (2006-05-26 10:05) [3]

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


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

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


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

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


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

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


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

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


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

см. [6]


 
wal ©   (2006-05-26 10:30) [9]

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


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

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


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

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

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


 
unknown ©   (2006-05-26 10:41) [12]

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


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


> kaginava   (26.05.06 10:34) [10]


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


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

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


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


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


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


 
tesseract ©   (2006-05-26 11:05) [16]

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

Пример 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



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

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


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

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


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


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


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


 
tesseract ©   (2006-05-26 12:10) [20]


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


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

ServiceStatus.dwServiceType:=SERVICE_INTERACTIVE_PROCESS or SERVICE_WIN32_OWN_PROCESS;


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


> ServiceStatus.dwServiceType:=SERVICE_INTERACTIVE_PROCESS
> or SERVICE_WIN32_OWN_PROCESS;

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


 
tesseract ©   (2006-05-26 12:46) [22]

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



Страницы: 1 вся ветка

Текущий архив: 2006.06.11;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.029 c
2-1148223618
Venil
2006-05-21 19:00
2006.06.11
RadioButton или Label


15-1147698344
matt
2006-05-15 17:05
2006.06.11
Модули Perl


11-1128113989
TamTam
2005-10-01 00:59
2006.06.11
Цвет и вид шрифта


15-1148034337
Сергей М.
2006-05-19 14:25
2006.06.11
$


2-1148550915
Alpine
2006-05-25 13:55
2006.06.11
Вопрос по генераторам