Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.06.11;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.041 c
2-1148590106
Blari
2006-05-26 00:48
2006.06.11
ListBox


15-1147883827
imasd
2006-05-17 20:37
2006.06.11
PHP


15-1147976042
Seldon
2006-05-18 22:14
2006.06.11
плагин к XChat


15-1147946969
Сергей М.
2006-05-18 14:09
2006.06.11
Адрес метки


4-1142495715
Вопрос2006
2006-03-16 10:55
2006.06.11
GetWindowPlacement





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский