Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.09;
Скачать: CL | DM;

Вниз

Вызов 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 вся ветка

Текущий архив: 2005.01.09;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.039 c
14-1103617283
Prohodil Mimo
2004-12-21 11:21
2005.01.09
Где найти прогу для IR-пульта?


11-1085054551
dimon1979
2004-05-20 16:02
2005.01.09
Аналог TOpenPictureDialog


1-1103722862
Cosinus
2004-12-22 16:41
2005.01.09
Как в TreeView.SomeNode добавить LongWord?


4-1100860875
PRM
2004-11-19 13:41
2005.01.09
Как запустить xcopy


14-1103541588
vajo
2004-12-20 14:19
2005.01.09
Сертификат соответствия