Question

Je lisais des informations sur NTVDM.exe alors que je construisais une application de console de test rapide et que celle-ci se bloquait sur une machine d'amis en se plaignant de ce fichier EXE.

Si je comprends bien, toutes les fenêtres cmd DOS (applications de console C # incluses) fonctionnent en 16 bits et non en 32 bits.

Est-ce vrai? Cela signifie-t-il que toutes les applications de back office de ma console de travail fonctionnent en 16 bits plutôt que de tirer le meilleur parti du 32 bits disponible?

Qu'en est-il des services Windows? Comme je crois que nous l'avons écrit en tant qu'application pour console, nous l'avons ensuite exécuté en tant que service Windows?

Merci

Était-ce utile?

La solution

Toute application .NET compilée pour x86 sera en 32 bits

Les applications de console C # ne fonctionnent pas dans " real " dos - ils fonctionnent dans un environnement 32 bits ou 64 bits - en fonction de votre système d'exploitation et de votre framework .NET.

Autres conseils

  

Si je comprends bien, toutes les fenêtres de commande DOS   (Applications pour console C # incluses) exécuté en tant que   16 bits et non 32 bits.

     

Est-ce vrai?

Non, pas du tout.

Vous pouvez exécuter des applications DOS sous Windows au format 16 bits, mais leur apparence un peu à la console n’est qu’une simple coïncidence.

Il n’existe pas d’applications .NET 16 bits. Qu'une application soit en mode console ou non, le fait qu’il soit en 16 ou 32 bits ne fait aucune différence.

Les applications MS-DOS s'exécutent en tant qu'applications 16 bits sous ntvdm.

" Console Windows " Les applications ne sont pas des applications DOS et s'exécutent en tant que processus Windows natif (où un bit de l'en-tête PE du fichier EXE l'identifie en tant qu'application de console, de sorte que Windows puisse créer / préparer une console Windows pour l'application si elle ne le fait pas déjà. Par exemple, si vous exécutez votre application console à partir de CMD, PowerShell réutilisera la fenêtre de console déjà créée, tandis qu’un double-clic sur le fichier EXE dans l’explorateur créera une nouvelle fenêtre de console pour l’application.)

CMD! = DOS

Console Windows! = DOS

De même, une API de console Windows complète est présente dans Windows depuis au moins Windows 2000 (NT5) si ce n’est pas plus tôt (bien que probablement NT3 / 4 uniquement.)

Une application console .NET. (ou toute autre application .NET) fonctionnera comme tout matériel ciblé auquel il est destiné. Donc, pour x86, ce sera 32 bits.

  

Si je comprends bien, toutes les fenêtres cmd DOS (applications de console C # incluses) fonctionnent en 16 bits et non en 32 bits.

Vous avez tort. Tous les cmd.exe Windows sont en 32 ou 64 bits, selon l’architecture.

DOS est mort avec Windows ME il y a presque dix ans.

Je ne connais aucune implémentation de machine virtuelle .NET capable de fonctionner en mode 16 bits. Les environnements d'exécution Microsoft .NET et Mono sont tous deux de 32/64 bits uniquement. Je ne connais pas les autres plus petits, mais je serais surpris de pouvoir travailler en mode 16 bits.

De plus, cmd.exe s'exécute en mode 32 bits, car cmd.exe est une application Windows 32 bits. En revanche, command.com s’exécute en mode 16 bits.

En fait, les applications de console sont loin d’être intrinsèquement 16 bits. Ce n'est tout simplement pas vrai, cela ne l'était même pas avant Windows, car le mode protégé x86 est 32 bits, donc tout jeu ou toute application pour DOS s'exécutant en mode protégé est 32 bits.

Dans .NET, votre type d’UI (ou votre absence d’UI, comme dans Windows Services) n’affecte pas la longueur des mots de l’application. Par défaut, les fichiers binaires .NET sont indépendants de la plate-forme et sont exécutés en tant qu'application 32 bits ou 64 bits en fonction du type de .NET Framework, du noyau, etc. de la machine hôte. Bien qu'ils puissent également être compilés directement en 64 bits.

Il n’ya rien de spécial à propos d’un exe de console; c'est juste un fichier PE. Donc, indépendamment du service console vs winform exe vs windows, il ne fonctionnera que dans le mode dans lequel il a été compilé.

Visual Studio, etc. ne générera jamais d’exe 16 bits. x86 vs x64 est plus intéressant ;-p

Il est probable que le framework .NET de votre ami n’est pas installé (ou n’a que la version 1.1).

Même sous DOS, ".EXE" peut être en 16 bits ou en 32 bits (avec la bibliothèque de codage appropriée ou d’extension DOS).

NTVDM.EXE est l’émulateur DOS prenant en charge l’exécution de fichiers .COM et .EXE 16 bits dans un environnement où ils peuvent supposer que la CPU est 16 bits et les appels système DOS sont disponibles. Sa seule association avec les invites de commande est que les programmes DOS en mode texte utilisent la fenêtre Console pour fournir l’émulation d’un écran VGA en mode texte.

Comme indiqué précédemment, aucune machine virtuelle .NET disponible ne peut être exécutée sous DOS. Cependant, il peut être amusant de démarrer à partir des sources du projet Mono pour en créer un qui fonctionne sous FreeDOS ... juste pour faire peur à vos amis ;-)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top