Консольные приложения C # все 16 бит? - PullRequest
1 голос
/ 04 декабря 2008

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

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

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

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

Спасибо

Ответы [ 9 ]

10 голосов
/ 04 декабря 2008

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

Консольные приложения C # не работают в «реальных» режимах - они работают в 32-битной или 64-битной среде - в зависимости от вашей ОС и .NET Framework.

6 голосов
/ 04 декабря 2008

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

Это правда?

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

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

Нет 16-битных приложений .NET, и независимо от того, является ли приложение консольным или нет, не имеет значения, является ли оно 16- или 32-битным.

4 голосов
/ 25 сентября 2009

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

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

CMD! = DOS

Консоль Windows! = DOS

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

2 голосов
/ 04 декабря 2008

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

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

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

2 голосов
/ 04 декабря 2008

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

1 голос
/ 04 декабря 2008

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

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

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

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

0 голосов
/ 26 февраля 2009

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

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

0 голосов
/ 04 декабря 2008

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

0 голосов
/ 04 декабря 2008

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

Visual Studio и т. Д. Никогда не будут генерировать 16-битный исполняемый файл. х86 против х64 интереснее; -p

Возможно, у вашего друга не установлена ​​платформа .NET (или только 1.1).

...