Форум: "Начинающим";
Текущий архив: 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