![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запуск программы из под IDE. Проблемы..
jack128 © (2004-09-08 04:14:00)Мдя.. На такую фигню сейчас наткнулся:
Есть несколько досовских программ, их нужно запустить из моей программы. Все очень просто - CreateProcess, и вперед и с песнями..
Запускаю с помощью такой функции:
function RunAndWait(FileName: string): Cardinal;
var
si: TStartupInfo;
pi: TProcessInformation;
begin
ZeroMemory(@si, SizeOf(si));
si.cb := SizeOf(si);
Win32Check(CreateProcess(nil, PChar(FileName), nil, nil, False, 0, nil,
PChar(ExtractFilePath(FileName)), si, pi));
try
CloseHandle(pi.hThread);
if WaitForSingleObject(pi.hProcess, INFINITE) <> WAIT_OBJECT_0 then
RaiseLastWin32Error;
Win32Check(GetExitCodeProcess(pi.hProcess, Result));
finally
CloseHandle(pi.hProcess);
end;
end;
Так вот, если я запускаю свою программу из под IDE и в ней вызываю эту функцию, то досовская прога аварийно завершается со словами: "Процессор NTDVM обнаружел недопустимую инструкцию. CS:040a IP:0569 OP:8d f3 03 b7 00 Для завершения работы приложения нажнмите кнопку "Закрыть"" И 2 кнопки - Закрыть и Пропустить.. В тоже время есть я свою прогу запускаю из Эксплоерера, то все работает нормально... Может кто знает, чем причина??
GuAV (2004-09-08 21:07:00) [21]
> я запускаю свою программу из под IDE
В интерированном отладчике дело или нет?
если Tools->Debugger Options->Integrated debuggingвыкл, то что тогда ?
зы [7] - маловероятно, написал не заметив
> своюпрогу запускаю из Эксплоерера
GuAV (2004-09-08 20:54:00) [22]При попытке дизасемблирования ShellExecuteEx выяснено, что заместо 0 использваны следующие флаги:
CREATE_DEFAULT_ERROR_MODE
CREATE_NEW_PROCESS_GROUP
CREATE_NEW_CONSOLE // при каких-то обстоятельствах, каких - не разбрал.
Имхо дело в этих флагах.
VMcL (2004-09-08 15:27:00) [23]>> jack128 © (08.09.04 13:43) [3]
Кстати, независимо от того, запускаешь ли ты через PIF или напрямую через EXE/COM, Windows запускает через одноименный PIF, если он, конечно, есть.
jack128 (2004-09-08 14:41:00) [24]VMcL © (08.09.04 13:49) [4]
нет. Тут вообще ни одной проги не прописано. Только внешний вид консоли.
VMcL (2004-09-08 13:49:00) [25]>> jack128 © (08.09.04 13:43) [3]
Посмотри сюда, здесь нет записи о твоей программе?
HKEY_CURRENT_USER\Console
jack128 (2004-09-08 13:43:00) [26]Digitman © (08.09.04 9:05) [2]
вероятно, такое разное поведение связано с наличием или отсутствием соответствующих pif-файлов
В смысле?? pif'ов нету нигде. И потом, я же не pif запускаю, а непосредственно EXE.
Digitman (2004-09-08 09:05:00) [27]вероятно, такое разное поведение связано с наличием или отсутствием соответствующих pif-файлов
jack128 (2004-09-08 04:19:00) [28]Да. Аварийно завершаются не ВСЕ досовские проги, а только некоторые(точнее пока одна, но нет гарантии, что остальные так себя не будут вести..)