![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
CreateProcess Ошибка! [D5, Win95/98, Win2k]
Борис © (2002-11-21 13:25:00)procedure TForm1.Button1Click(Sender: TObject);
var st_startupinfo:STARTUPINFO;
str_lpprocessinformation:process_information;
begin
st_startupinfo.lpReserved:=nil;
st_startupinfo.lpTitle:=nil;
st_startupinfo.dwFlags:=STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
st_startupinfo.cbReserved2:=0;
st_startupinfo.lpReserved:=nil;
if CreateProcess(nil, "c:\program files\Internet explorer\iexplore.exe c:\index.html" ,nil, nil, TRUE, Normal_Priority_Class, nil , nil, st_startupinfo, str_lpprocessinformation)= false then
begin
showmessage("Процесс не создан!");
end;
end;
Открывается IE с файликом index.html, но сразу выскакивает:
Программа вып. нед. операцию и будет закрыта:
Программа IEXPLORE вызвала сбой при обращении к странице памяти
в модуле MSVCRT20.DLL по адресу 0167:7fc37939.
Регистры:
EAX=8190501c CS=0167 EIP=7fc37939 EFLGS=00010202
EBX=0000c000 SS=016f ESP=01eaef5c EBP=01eaefb0
ECX=2063fbff DS=016f ESI=8197d494 FS=769f
EDX=bffc9490 ES=016f EDI=7fc69000 GS=0000
Байты по адресу CS:EIP:
f3 a5 8b c8 83 e1 03 f3 a4 8b 45 fc 3d 00 01 00
Содержимое стека:
00000000 0000040a 0000c000 83e4047f 02006b6f 6b6f8334 00000000 05ef2784 05eff824 84500007 01e86b6f f7d60209 05ef0776 07760000 01dd0209 00000d70
Потом такое-же окно для модуля Kernel.
В чем ошибка? И еще, почему не срабатывает, если в первом параметру указываешь исполняемый, а во втором параметр?
CreateProcess("c:\program files\Internet explorer\iexplore.exe, "c:\index.html" ,nil, nil, TRUE, Normal_Priority_Class, nil , nil, st_startupinfo, str_lpprocessinformation) ???
Борис (2002-11-21 15:02:00) [1]Большое спасибо! Код упростил.
а теперь вот-такой вопрос:
Как с помощью ShelExecute изменить параметр, чтобы уже открытый эсплорер заставить открыть файл index2.html? Прочитал описание, но там вроде только на открытие папки/файла, а как быть в данном случае?
Юрий Зотов (2002-11-21 14:57:00) [2]Зачем выполнять лишние действия и действия, которые и без того выполняются по умолчанию?
1. ProcessInformation можно не чистить.
2. Для Вашего случая в StartupInfo после чистки достаточно заполнить только CB.
В итоге код упростится, а результат будет тот же.
Борис (2002-11-21 14:37:00) [3]Все работает! Сделал так:
ZeroMemory(@st_startupinfo, sizeof(st_startupinfo));
ZeroMemory(@str_lpprocessinformation, sizeof(str_lpprocessinformation));
st_startupinfo.cb := SizeOf(st_startupinfo);
st_startupinfo.wShowWindow :=SW_SHOWNORMAL;
st_startupinfo.lpReserved:=nil;
st_startupinfo.lpTitle:=nil;
st_startupinfo.dwFlags := STARTF_USESHOWWINDOW;
st_startupinfo.cbReserved2:=0;
st_startupinfo.lpReserved:=nil;
if CreateProcess(Pchar(Eprocess.text), PChar(" "+Edit1.text), nil, nil, TRUE, Normal_Priority_Class, nil , nil, st_startupinfo, str_lpprocessinformation)= false then
begin
showmessage("Процесс не создан!");
end;
Внук (2002-11-21 14:25:00) [4]Пока не почистите структуры и не укажете их размеры, работать все равно не будет.
См. KoluChi © (21.11.02 13:49)
Борис (2002-11-21 13:50:00) [5]Kudatsky, спасибо за ответ, однако нужно именно CreateProcess!
KoluChi (2002-11-21 13:49:00) [6]Рабочий код:
var
PrInfo: PROCESS_INFORMATION;
StInfo: STARTUPINFO;
ExitCode: DWord;
begin
ZeroMemory(@StInfo, sizeof(StInfo));
with StInfo do
begin
cb := SizeOf(StInfo);
wShowWindow := WindowState;
dwFlags := STARTF_USESHOWWINDOW;
end;
if not CreateProcess(nil, PChar(ExecLine), nil, nil, False, CREATE_NEW_PROCESS_GROUP, nil, nil, StInfo, PrInfo) then Exit;
WaitForSingleObject(PrInfo.hProcess, INFINITE);
CloseHandle(PrInfo.hProcess);
CloseHandle(PrInfo.hThread);
Kudatsky (2002-11-21 13:46:00) [7]Попробуй функции FileExecute или FileExecuteWait из RxLib. Я их использую так:
Path:=HelpPath+"\Index.htm";
if FileExecute(Path, "", "", esNormal) <= 32 then
ShowMessage("Не запускается Internet Browser");
Борис (2002-11-21 13:27:00) [8]Про второй вопрос уже сам понял (пока писал) ;-)
Надо было поставить пробел перед параметром:
CreateProcess("c:\program files\Internet explorer\iexplore.exe, " c:\index.html" ,nil, nil, TRUE, Normal_Priority_Class, nil , nil, st_startupinfo, str_lpprocessinformation)
А вот вопрос об ошибке в силе!