Pregunta

Estaba leyendo sobre NTVDM.exe cuando construí una aplicación de consola de prueba rápida y se estrelló en una máquina de amigos quejándose de este EXE.

Según tengo entendido, todas las ventanas cmd de DOS (aplicaciones de consola C # incluidas) se ejecutan como 16 bits, no 32 bits.

¿Es esto cierto? ¿Significa esto que todas las aplicaciones de back office de la aplicación de consola de mis trabajos se ejecutan como 16 bits en lugar de aprovechar al máximo los 32 bits disponibles?

¿Qué pasa con los servicios de Windows? Como creo que lo escribimos como una aplicación de consola, ¿lo hicimos funcionar como un servicio de Windows?

Gracias

¿Fue útil?

Solución

Cualquier aplicación .NET que se compila para x86 será de 32 bits

Las aplicaciones de consola C # no se ejecutan en "real" dos: se ejecutan en un entorno de 32 bits o 64 bits, dependiendo de su sistema operativo y marco .NET.

Otros consejos

  

Según tengo entendido, todas las ventanas cmd de DOS   (Aplicaciones de consola C # incluidas) se ejecutan como   16 bits no 32 bits.

     

¿Es esto cierto?

No, en absoluto.

Puede ejecutar aplicaciones de DOS en Windows, y son de 16 bits, pero el hecho de que se vean como una consola es casi una coincidencia.

No hay aplicaciones .NET de 16 bits, y si una aplicación está en modo consola o no, no importa si tiene 16 o 32 bits.

Las aplicaciones MS-DOS se ejecutan como aplicaciones de 16 bits en ntvdm.

" Consola de Windows " Las aplicaciones no son aplicaciones de DOS y se ejecutan como un proceso nativo de Windows (donde un bit en el encabezado PE del archivo EXE lo identifica como una aplicación de consola, de modo que Windows puede crear / preparar una consola de Windows para la aplicación si aún no existe existen, por ejemplo, ejecutar su aplicación de consola desde CMD o PowerShell reutilizará la ventana de consola ya creada, mientras que al hacer doble clic en el EXE en el Explorador se creará una nueva ventana de consola para la aplicación).

CMD! = DOS

Consola de Windows! = DOS

Del mismo modo, hay una API de consola de Windows completa que ha estado presente en Windows desde al menos Windows 2000 (NT5) si no antes (aunque probablemente solo NT3 / 4).

Una aplicación de consola .NET. (o cualquier otra aplicación .NET) se ejecutará como cualquier hardware de destino al que esté JIT. Entonces para x86 será de 32 bits.

  

Según tengo entendido, todas las ventanas cmd de DOS (aplicaciones de consola C # incluidas) se ejecutan como 16 bits, no 32 bits.

Estás equivocado. Todos los cmd.exe de Windows son de 32 o 64 bits, dependiendo de la arquitectura.

DOS murió junto con Windows ME hace casi una década.

No conozco ninguna implementación de .NET VM que sea capaz de ejecutarse en modo de 16 bits. El tiempo de ejecución de Microsoft .NET y Mono son solo 32/64 bits. No sé sobre los otros más pequeños, pero me sorprendería si pudieran funcionar en modo de 16 bits.

Además, cmd.exe se ejecuta en modo de 32 bits, ya que cmd.exe es una aplicación de Windows de 32 bits. Por otro lado, command.com se ejecuta en modo de 16 bits.

En realidad, las aplicaciones de consola están lejos de ser inherentemente de 16 bits. Esto simplemente no es cierto, ni siquiera era cierto antes de Windows, ya que el modo protegido x86 es de 32 bits, por lo que cualquier juego o aplicación para DOS que se ejecute en modo portado es de 32 bits.

En .NET, su tipo de IU (o la falta de IU como en los Servicios de Windows) no afecta la longitud de palabra de la aplicación. De manera predeterminada, los binarios .NET son independientes de la plataforma y se ejecutan como aplicaciones de 32 bits o 64 bits, según el tipo de .NET Framework, el núcleo, etc. de la máquina host. Aunque también se pueden compilar directamente a 64 bits.

No hay nada especial en un exe de consola; Es solo un archivo PE. Entonces, independientemente de la consola vs winform exe vs el servicio de Windows, solo se ejecutará en cualquier modo que se haya compilado.

Visual Studio, etc., nunca generará un exe de 16 bits. x86 vs x64 es más interesante ;-p

Probablemente, su amigo no tiene instalado .NET Framework (o solo tiene 1.1).

Incluso bajo DOS, " .EXE " podría ser de 16 o 32 bits (con la codificación adecuada o la biblioteca de extensión de DOS).

NTVDM.EXE es el emulador de DOS que admite la ejecución de archivos .COM y .EXE de 16 bits en un entorno en el que pueden asumir que la CPU es de 16 bits y que las llamadas al sistema DOS están disponibles. Su única asociación con los comandos es que los programas DOS en modo texto usan la ventana Consola para proporcionar la emulación de una pantalla VGA en modo texto.

Como se señaló, no hay ninguna VM .NET disponible que pueda ejecutarse en DOS. Sin embargo, puede ser divertido comenzar desde las fuentes del proyecto Mono y construir uno que se ejecute en FreeDOS ... solo para asustar a tus amigos ;-)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top