Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.188.254.179] |
|
Страницы: (2) 1 [2] все ( Перейти к последнему сообщению ) |
Сообщ.
#16
,
|
|
|
2 Drew: ERRORLEVEL уничтожается до запуска следующей команды....
Более или менее подходящий способ для тебя - это сесть на ah=4Dh/int21h и сохранить этот код в своих внутренних переменных. А потом (при повторном запуске, скажем, с каким-нибудь ключём) выполнять то, что тебе нужно, выгрузив TSR из памяти Т.е: @echo off<br>ТвояПрога /install<br>КакуюПрогуНадоПроверить<br>ТвояПрога /check Или (что ещё лучше) сделать программу, которая запускает прогу, указананную в коммандной строке (только напрямую, не через COMMAND.COM /C), а потом проверять код.... |
Сообщ.
#17
,
|
|
|
бредовая мысль - есть программы, преобразующие BAT в COM .... как у них
с ErrorLevel? .... если 'хорошо', то ... |
Сообщ.
#18
,
|
|
|
... ага... ВОТ!!!!
DOS сохраняет полученный ею код возврата завершившегося процесса в одной из системных таблиц до тех пор, пока его не затребует родительская программа. После этого код возврата сбрасывается. Если программа запускается с клавиатуры (командой оператора), родительским процессом является COMMAND.COM, котрый и принимает код завершения (и, впрочем, НИЧЕГО с ним не делает).... К.Г.Финогенов. Самоучитель по системным функциям MS-DOS 3-е издание, стр 186. ГДЕ ТА САМАЯ "СИСТЕМНАЯ ТАБЛИЦА"? |
Сообщ.
#19
,
|
|
|
Ну какая тебе разница?! После COMMAND.COM'а там всё равно будет ноль!!!
|
Сообщ.
#20
,
|
|
|
Drew, ну.. есть int 21, функция 52 (всё 16-ричное). Читай Ральфа Брауна. Но, поверь мне, это извращение. Легче просто написать прогу, которая пускала бы соответствующие проги. Зачем тебе всё это нужно, кстати?
|
Сообщ.
#21
,
|
|
|
Цитата Kernel Panic, 22.05.02, 00:07:46 Легче просто написать прогу, которая пускала бы соответствующие проги. Зачем тебе всё это нужно, кстати? Всё просто - ГЛАВНОЕ (и, пожалуй единственное) преимущество пакетного файла (BAT), что он не нуждается в перекомпиляции и довольно быстро модифицируется даже не слишком искушенным программером. я по работе часто сталкиваюсь в такими ситуёвинами, что меняется состав программ, возвращающих ERRORLEVEL, да и памяти для программы, возвращающей EL просто нет, чтобы запустить её как виртуальный модуль (spawnXXX) поэтому приходится общаться через окружение COMMAND.com или ERRORLEVEL ДА ! О ПТИЧКАХ ! Оставим мелкомягким ИХ проблемы с ERRORLEVEL ! КТО ЗНАЕТ, КАК ПОПАСТЬ В MCB COMMAND.COM, чтобы изменить КОРЕННУЮ ПЕРЕМЕННУЮ ОКРУЖЕНИЯ, А НЕ ЕЁ КОПИЮ!?? |
Сообщ.
#22
,
|
|
|
Вызываешь ah=52h/int21h, далее делаешь mov es,es:[bx-2], получаешь в es адрес первого MCB, далее сканнируешь их и ищешь Environment COMMAND.COM'а
|
Сообщ.
#23
,
|
|
|
Всё было бы чудно, ежели бы не эта НЕДОКУМЕНТИРОВАННАЯ функция.... она возвращает адрес списка списков по ES:[BX] !!!
а вот ЧТО она возвращает по ES:[BX-2] ??? поясни, пожалуйста. Я посмотрел - там ES:[BX-2] ваще бредятина какая-то... которая НИКУДА не указывает... :-[ |
Сообщ.
#24
,
|
|
|
В es:[bx-2] находится сегмент первого MCB (1 слово).... Это есть в TechHelp'е....
|
Сообщ.
#25
,
|
|
|
про адрес сегмента и про то, что МСВ выравнивается по границе этого сегмента, я в курсах, только я также знаю структуру МСВ, а то, что ТАМ - ни на что не похоже...
25.05.2002 Посмотрел внимательнее... ТАМ МСВ типа М (не ПОСЛЕДНИЙ то есть) и НЕ MCB COMMAND.COM... потом нашел FCB COMMAND.COM, но сменить переменную окружения так и не удалось.... то есть сменил, но, по команде SET на экран выползли СТАРЫЕ значения переменных... |