![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| bass |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 315 Регистрация: 5.8.2007 Репутация: 2 Всего: 2 |
Такая ситуация запускаю процесс через CreateProcess.... А процесс просто файл забытый ноликами.. CreateProcess. возвращает труе может кто нить объяснить что нибудь по этому поводу..
|
|||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
даже и не вериться
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Все просто. Смотрим описание CreateProcess :
Смотрим, что такое 'файл, забитый ноликами'. Т.к. сигнатуры PE в нем нет, то он будет отдан подсистеме MS-DOS, которая успешно запустится, в знак чего CreateProcess и вернет TRUE. Далее подсистема MS-DOS определит, что это не exe файл (по отсутствию сигнатуры MZ в начале файла), и запустит его как .com файл. А нули - это вполне валидная x86 команда |
||||
|
|||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 9 Всего: 45 |
Позволю себе не согласиться. Чтобы запустить MS-DOS просесс, нужно указать специальный флаг CREATE_FORCEDOS. Чтобы запустить com-приложение, нужно, чтобы у запускаемого файла было расширение .com. Я решал подобную проблему через WaitForInputIdle:
вкупе с GetExitCodeProcess. -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| bass |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 315 Регистрация: 5.8.2007 Репутация: 2 Всего: 2 |
feodorv
Только почему тогда труе возвращается???? |
|||
|
||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Не обязательно. Dos процесс и так определится. Force нужен что бы отключить автоматическое определение
Это не так уже со времен первых версий Windows. Exe отделяется от com исключительно по сигнатуре в файле |
||||
|
|||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 9 Всего: 45 |
Нет, всё же я не прав в отношении флага CREATE_FORCEDOS. Он нужен, когда хочется запустить 16-битный батник. Воспроизвёл ситуацию на Windows Server 2003. Вернулось TRUE. Но при этом выскочило окошко "ntvdm.exe- System Error" с надписью "NTVDM encountered a hard error".... TRUE возвращается потому, что корректно создаётся процесс ntvdm.exe, и CreateProcess не волнует, что там далее. А далее уже ntvdm.exe не может выполнить тупой файл... Это сообщение отредактировал(а) feodorv - 6.1.2012, 23:39 -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |