Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/21: Рейтинг темы: голосов - 21, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 03.04.2015
Сообщений: 3
1

Процедура Exec: this program can not be run in DOS mode

05.04.2015, 15:30. Показов 4077. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Работаю в TurboPascal (Borland 7.0) через DosBox. Проблема такая: использую процедуру Exec, запускаю Файл формата BAT через cmd.exe, ошибок не выдаёт, но зато пишет ошибку при выводе: "this program can not be run in DOS mode". Кто-нибудь знает, как это исправить?
Pascal
1
2
3
4
5
6
7
8
9
10
Program Bat;
{$M 65520,0,10000}
Uses dos;
Begin
Swapvectors;
Exec('C:\windows\system32\cmd.exe','/C G:\ex.bat');
Writeln(doserror);
Readln;
Swapvectors;
End.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.04.2015, 15:30
Ответы с готовыми решениями:

This program cannot be run in DOS mode
C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE14\MSO.DLL:1:1: error: stray '\220' in...

This program cannot run in DOS mode
В интернете нашел программу, которая управляет параллельным портом, написанную на с++....

This program cannot run in DOS mode. Мигать светодиодами в LPT порту
В интернете нашел программу, которая управляет параллельным портом, написанную на с++....

How to install the program in stealth mode?
start "program name".exe /wait /s or "program name".exe -wait -s or "program name".exe /wait /s...

4
3406 / 1825 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
05.04.2015, 17:22 2
Цитата Сообщение от William Folk Посмотреть сообщение
C:\windows\system32\cmd.exe
Вы пытаетесь запустить программу Windows в DOS'e. Т.е. 32-х битную программу в 16-ти битной среде.
0
0 / 0 / 0
Регистрация: 03.04.2015
Сообщений: 3
06.04.2015, 23:59  [ТС] 3
Эм... Я извиняюсь, но разве DOS 16 битный?
0
Модератор
Эксперт по электронике
8505 / 4360 / 1646
Регистрация: 01.02.2015
Сообщений: 13,530
Записей в блоге: 8
07.04.2015, 09:42 4
Думаю, что нужно получить путь к командному интерпретатору из переменной окружения COMSPEC. Для эмулятора DOS она должна быть определена. Как это сделать? есть процедуры в модуле DOS - EnvCount, EnvStr и GetEnv, а в справке такие примерчики их использования
Pascal
1
2
3
4
5
6
7
8
9
{Sample code for the EnvCount function.}
 
  uses Dos;
 
  var I: Integer;
  begin
    for I := 1 to EnvCount do
       Writeln(EnvStr(I));
  end.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{Sample code for the GetEnv function.}
 
 {$M 8192,0,0}
  uses Dos;
 
  var Command: string[79];
  begin
    Write('Enter DOS command: ');
    Readln(Command);
    if Command <> '' then
      Command := '/C ' + Command;
    SwapVectors;
    Exec(GetEnv('COMSPEC'), Command);
    SwapVectors;
    if DosError <> 0 then
      Writeln('Could not execute COMMAND.COM');
  end.
После получения строки sComSpec с путём к 'command.com' можно будет вызывать
Pascal
1
Exec(sComSpec, '/C G:\ex.bat');
0
3406 / 1825 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
08.04.2015, 18:34 5
ФедосеевПавел, William Folk
Смотрите дампы:
Assembler
1
2
3
4
0000:0000  4D 5A 50 00 02 00 00 00 04 00 0F 00 FF FF 00 00  MZP·········яя··
0000:0050  54 68 69 73 20 70 72 6F 67 72 61 6D 20 6D 75 73  This program mus
0000:0060  74 20 62 65 20 72 75 6E 20 75 6E 64 65 72 20 57  t be run under W
0000:0070  69 6E 33 32 0D 0A 24 37 00 00 00 00 00 00 00 00  in32··$7········
Это стандартный заголовок-ловушка любой 32-х битной WIN-программы, называется MZ-заголовком.
Основной заголовок 32-х битного приложения начинается с символов РЕ и выглядит так:
Assembler
1
2
3
0000:0100  50 45 00 00 4C 01 03 00 19 5E 42 2A 00 00 00 00  PE··L····^B*····
0000:0110  00 00 00 00 E0 00 8F 81 0B 01 02 19 00 E0 05 00  ····а·ЏЃ·····а··
0000:0120  00 30 00 00 00 C0 0D 00 30 A1 13 00 00 D0 0D 00  ·0···А··0Ў···Р··
При запуске в 32-х битной среде первый MZ-заголовок игнорируется и управление передается сразу на РЕ-заголовок, и только после этого запускается программа.
Если запустить WIN-программу в 16-ти битной среде, срабатывает MZ-заголовок-ловушка, выводит сообщение и останавливает запуск этой программы.
Тексты сообщений зависят от компиляторов, спомощью которых создавались программы, но смысл их один: "Вам не сюда"
1
08.04.2015, 18:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.04.2015, 18:34
Помогаю со студенческими работами здесь

Запуск приложения с параметрами методом Exec или Run.
День добрый. Возникла проблема. Надо скриптом запускать некое приложение (на сервере естессно), но...

Event generator - Run Program
Есть Домино 9.0.1 на платформе CentOS 6.7. Нужно создать EG который бы следил за таском http и...

Please run this program from the Administrator account so it can set up your license
У меня на компьютере выделив любой файл при попытке нажать на правую кнопку мыши вылетает ошибка:...

Visual Studio setup cannot run in compatibility mode
Купил ноутбук. При установке VB 2010 возникает ошибка ( см.скрин ). На 2012 студии такая-же. Что...

Процедура Exec. Ошибка при запуске программы
Здравствуйте! Когда я запускаю программу которая с помошью процедуры Ехес должна запускать...

DOS перезагружается при переходе в protected mode после создания файла
Привет! Суть проблемы в следующем - есть код, который из protected mode переходит в real mode, там...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru