Форум: "WinAPI";
Текущий архив: 2005.01.09;
Скачать: [xml.tar.bz2];
ВнизВызов CreateProcess Найти похожие ветки
← →
tyuiop (2004-11-18 08:25) [0]Возможно, кто-то знает, как решается следующая проблема.
При запуске внешней программы с помощью CreateProcess (прога досовая) с параметром командной строки комп перезагружается. При вызове без параметра все нормально.
В чем может быть дело?
← →
NetDigger © (2004-11-18 08:30) [1]Хммм, странно. Приведи код, пожалуйста.
← →
tyuiop (2004-11-18 08:35) [2]Функция, запускающая программу (содержит вызов CreateProcess):
function TMainForm.ExecCmd(const aCommand: String;const aShow, aWaitExit: Boolean): Boolean;
var
pi:PROCESS_INFORMATION;
si:STARTUPINFO;
cmdLine,Path: String;
begin
Result := False;
ZeroMemory(@si,sizeof(si));
si.cb:=SizeOf(si);
si.dwFlags := STARTF_FORCEONFEEDBACK+STARTF_USESHOWWINDOW;
if aShow then si.wShowWindow := SW_SHOWNORMAL else si.wShowWindow := SW_HIDE;
Path := ExtractFilePath(aCommand);
cmdLine := aCommand;
Result := CreateProcess( nil, // No module name (use command line).
PChar(cmdLine), // Command line.
nil, // Process handle not inheritable.
nil, // Thread handle not inheritable.
False, // Set handle inheritance to FALSE.
0, // No creation flags.
nil, // Use parent"s environment block.
PChar(Path), // Use parent"s starting directory.
si, // Pointer to STARTUPINFO structure.
pi ); // Pointer to PROCESS_INFORMATION structure.
if Result then begin
CloseHandle(pi.hThread);
if aWaitExit then WaitForSingleObject( pi.hProcess, infinite );
CloseHandle(pi.hProcess);
end;
end;
А вот обращение к этой функции:ExecCmd("j:\diasoft\bank\bat\penpodtv.exe d:\qwer.txt",True,False);
← →
Игорь Шевченко © (2004-11-18 10:14) [3]В коде нету ничего, что вызывало бы перезагрузку.
← →
tyuiop (2004-11-18 10:39) [4]
> В коде нету ничего, что вызывало бы перезагрузку.
Ну да. Но факт остается фактом.
← →
BiN © (2004-11-18 11:01) [5]>> tyuiop (18.11.04 08:25)
Возможно, кто-то знает, как решается следующая проблема.
При запуске внешней программы с помощью CreateProcess (прога досовая) с параметром командной строки комп перезагружается. При вызове без параметра все нормально.
Если при запуске ДОС-приложения из cmd перезагрузки не происходит, то остается только (очень малая) вероятность, что твой код запуска содержит небезопасный участок, который и "вышибает" ОС.
Одни из граблей - это передача в качестве командной строки PChar(cmdLine). Я бы заменил на массив символов с длиной несколько большей, чем длина оригинальной командной строки.
И хотя перезагрузка из-за ошибки доступа к памяти - это из ряда вон, но чем черт не шутит.
← →
Игорь Шевченко © (2004-11-18 11:13) [6]BiN © (18.11.04 11:01) [5]
Невероятно
← →
tyuiop (2004-11-18 11:22) [7]
> Если при запуске ДОС-приложения из cmd перезагрузки не происходит,
> то остается только (очень малая) вероятность, что твой код
> запуска содержит небезопасный участок, который и "вышибает"
> ОС.
Все возможно. Но дело в том, что код внешней проги не мой, и исходников нет. А при запуске из командной строки с параметром нормально срабатывает.
← →
Игорь Шевченко © (2004-11-18 12:19) [8]Сломать систему Win2k не так уж просто. Посмотри, может в EventLog что-то пишется при такой вот перезагрузке.
← →
tyuiop (2004-11-19 08:26) [9]Проблему решить так и не удалось, пришлось переписать прогу в Delphi. Просто ради любопытства, может быть, кто-то знает, из-за чего в принципе может происходить такое явление? Мне кажется, там было некорректное обращение к памяти…
← →
Fay © (2004-11-19 08:41) [10]
PChar(cmdLine), // Command line
- это коммандная строка?
Она дожна быть доступна для редактирования. Т.е. выдели память сначала.
← →
Fay © (2004-11-19 14:08) [11]2 tyuiop
Я не понял. Заработало или нет?
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.01.09;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.037 c