Вопрос

Я читал о NTVDM.exe когда я создавал быстрое тестовое консольное приложение, и оно разбилось на компьютере друзей, жалующихся на этот EXE.

Насколько я понимаю, все DOS cmd windows (включая консольные приложения C #) запускаются как 16-битные, а не 32-битные.

Это правда?Означает ли это, что все приложения моего бэк-офиса works console app работают как 16-разрядные, а не максимально используют 32-разрядные версии?

Как насчет служб Windows?Насколько я полагаю, мы написали его как консольное приложение, а затем запустили как службу Windows?

Спасибо

Это было полезно?

Решение

Любое .NET-приложение, скомпилированное для x86, будет 32-разрядным

Консольные приложения C # не выполняются в "реальной" dos - они выполняются в 32-разрядной или 64-разрядной среде - в зависимости от вашей операционной системы и .NET framework.

Другие советы

Насколько я понимаю, все DOS cmd windows (Включая консольные приложения C #) запускаются как 16-битные, а не 32-битные.

Это правда?

Нет, вовсе нет.

Вы можете запускать DOS-приложения под Windows, и они 16-разрядные, но тот факт, что они выглядят немного консольными, в значительной степени просто совпадение.

16-разрядных приложений не существует .СЕТЕВЫЕ приложения, и независимо от того, работает приложение в консольном режиме или нет, не имеет значения, 16 оно или 32 разрядное.

Приложения MS-DOS запускаются как 16-разрядные приложения под управлением ntvdm.

Приложения "Windows Console" не являются приложениями DOS и выполняются как собственный процесс Windows (где бит в PE-заголовке EXE-файла идентифицирует его как консольное приложение, так что Windows может создать / подготовить консоль Windows для приложения, если таковая еще не существует, напримерзапуск вашего консольного приложения из CMD или PowerShell приведет к повторному использованию уже созданного окна консоли, тогда как двойной щелчок по EXE-файлу в Проводнике создаст новое окно консоли для приложения.)

CMD != DOS

Консоль Windows != DOS

Аналогично, существует полноценный консольный API Windows, который присутствует в Windows, по крайней мере, с Windows 2000 (NT5), если не раньше (хотя, вероятно, только NT3 / 4).

Консольное приложение .NET.(или любое другое .NET-приложение) будет работать от имени любого целевого оборудования, к которому оно подключено.Таким образом, для x86 он будет 32-разрядным.

Насколько я понимаю, все DOS cmd windows (включая консольные приложения C #) запускаются как 16-битные, а не 32-битные.

Вы ошибаетесь.Все cmd.exe Windows 32 или 64-разрядная, в зависимости от архитектуры.

DOS умерла вместе с Windows ME почти десять лет назад.

Я не знаю ни о какой реализации виртуальной машины .NET, которая способна работать в 16-разрядном режиме.Microsoft .NET runtime и Mono имеют только 32/64 бита.Я не знаю о других, меньших по размеру, но я был бы удивлен, если бы они могли работать в 16-битном режиме.

Кроме того, cmd.exe запускается в 32-разрядном режиме как cmd.exe является 32-разрядным приложением Windows.С другой стороны, command.com выполняется в 16-разрядном режиме.

На самом деле консольные приложения далеки от того, чтобы быть изначально 16-разрядными.Это просто неправда, этого не было даже до Windows, поскольку защищенный режим x86 является 32-разрядным, поэтому любая игра или приложение для DOS, запущенные в режиме portected, являются 32-разрядными.

В .NET ваш тип пользовательского интерфейса (или отсутствие пользовательского интерфейса, как в службах Windows) не влияет на длину слова приложения.По умолчанию двоичные файлы .NET не зависят от платформы и выполняются как 32-разрядное или 64-разрядное приложение в зависимости от типа .NET Framework, ядра и т.д.хост-машины.Хотя они также могут быть скомпилированы непосредственно в 64-разрядные версии.

В консольном exe нет ничего особенного;это всего лишь PE-файл.Таким образом, независимо от консоли или winform exe или службы Windows, он просто будет запускаться в любом режиме, в котором он был скомпилирован.

Visual Studio etc никогда не сгенерирует 16-разрядный exe-файл.x86 vs x64 интереснее ;-p

Вероятно, у вашего друга нет .NET framework установлен (или имеет только 1.1).

Даже в DOS ".EXE" может быть 16-разрядным или 32-разрядным (с соответствующей кодировкой или библиотекой расширения DOS).

NTVDM.EXE является ли эмулятор DOS, поддерживающий запуск 16-разрядной .COM и .EXE файлы в среде, где они могут предполагать, что процессор 16-разрядный и что доступны системные вызовы DOS.Его единственная связь с командными подсказками заключается в том, что программы DOS в текстовом режиме используют окно консоли для эмуляции экрана VGA в текстовом режиме.

Как уже отмечалось, не существует доступной виртуальной машины .NET, которая могла бы работать под управлением DOS.Однако было бы интересно начать с исходных текстов проекта Mono и создать тот, который работает под управлением FreeDOS...просто чтобы напугать своих друзей ;-)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top