TL; DR
При запуску 32-бітної консольної програми вона виконується cmd
; коли ви запускаєте 16-бітну консольну програму, вона виконується command
.
Деталі
Windows XP включає підсистему для підтримки старих 16-бітних програм.
Старі 16-бітні програми доступні як у програмах DOS, так і Windows. Програми DOS за своєю природою є консольними програмами та працюють у тому, що схоже на командний рядок. Однак 32-розрядні програми консолі Windows дуже схожі і виглядають однаково.
Командний процесор / інтерпретатор cmd
має кілька цілей:
- Для виконання 32-бітної текстової програми консолі Windows
- Для того, щоб забезпечити і обробляти різні функції командного рядка (
dir
, copy
і т.д.)
- Інтерпретація та виконання пакетних файлів (сумісних з DOS
.bat
файлів та NT-сумісних .cmd
файлів)
Під час запуску старої 16-бітної консольної програми вона виконується NTVDM (Windows NT Virtual DOS Machine). Він надає емульовану систему DOS (отже, і віртуальну машину DOS ), яка схожа на запуск спеціалізованого програмного забезпечення віртуальної машини, за винятком того, що шар емуляції є більш простим. command
це 16-розрядна версія командного інтерпретатора, що набагато ближче до фактичного DOS, ніж cmd.exe
насправді програма Windows (і має заголовок Windows PE, на відміну від command.com
якої має заголовок DOS MZ).
command
має ті самі цілі, cmd
що і лише те, що він підтримує лише 16-бітні програми. Крім того, він не підтримує .cmd
файли і має меншу кількість вбудованих команд і обмежений у своєму синтаксисі ( cmd
це новіший, сучасніший, більш просунутий інтерпретатор командного рядка, подібний до 4DOS ).
Однак він підтримує графічні програми DOS (як і старі ігри), але успіх їх запуску залежить від драйверів відеокарт та характеру програми. Існує чимало сайтів, які пропонують різні хитрощі, щоб змусити DOS-ігри працювати на Windows (хоча успіх у Vista і вище зазвичай обмежений, ніж на XP).
Слід зазначити, що 64-розрядні версії Windows повністю відмовилися від підтримки 16-бітних програм, і тому взагалі не включають command
, тому ні DOS, ні 16-бітні програми Windows не запускатимуться, а замість цього викинуть (вводить в оману) повідомлення про помилку .
Технічні примітки
command.com
має .com
розширення для зворотної сумісності з програмами DOS, але, як і більшість інших версій Windows для зовнішніх команд DOS, внутрішньо, це фактично файл Windows PE .exe
. Це дає цікаве зауваження, що, хоча Windows використовує розширення як індикатор того, як обробляти більшість типів файлів, для виконавчих файлів він ігнорує розширення і розглядає його вміст (інакше .exe
анкета не працює, якщо трактуватись як a .com
). Це питання стосується цього ефекту.
command.com
це застаріла 16-бітна версія (доступна лише для 32-бітних установок). Він не існує в моїй 64-