![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запуск программы из сервиса [D7]
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 возвращает