Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.029 c
8-1096741929
RoLeX2004
2004-10-02 22:32
2005.01.09
Как изменить уровень низких частот???


1-1103736697
Alex_Petr
2004-12-22 20:31
2005.01.09
Обнуление переменной.


1-1103598978
Sash
2004-12-21 06:16
2005.01.09
excel


14-1103628668
wHammer
2004-12-21 14:31
2005.01.09
Помогите разобраться. Что считать клиент-сервером?


14-1103642476
Болтуны, кто они?
2004-12-21 18:21
2005.01.09
Предлагаю выбрать наиболее болтливых, по принципу:





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский