C#コンソールアプリケーションはすべて16ビットですか?
-
19-08-2019 - |
質問
クイックテストコンソールアプリをビルドするときにNTVDM.exeについて読んでいたところ、このEXEについて不平を言っている友人のマシンでクラッシュしました。
理解したとおり、すべてのDOS cmdウィンドウ(C#コンソールアプリを含む)は32ビットではなく16ビットとして実行されます。
これは本当ですか?これは、32ビットを最大限に活用するのではなく、すべての作品コンソールアプリのバックオフィスアプリが16ビットとして実行されることを意味しますか?
Windowsサービスはどうですか?コンソールアプリとして作成してから、Windowsサービスとして実行するようにしましたか?
ありがとう
解決
x86用にコンパイルされるすべての.NETアプリは32ビットになります
C#コンソールアプリが<!> quot; real <!> quot;で実行されていません。 dos-OSおよび.NETフレームワークに応じて、32ビットまたは64ビット環境で実行されます。
他のヒント
理解しているように、すべてのDOS cmdウィンドウ (C#コンソールアプリを含む)として実行 32ビットではなく16ビット。
これは本当ですか?
いいえ、まったくありません。
WindowsでDOSアプリケーションを実行できます。これらは16ビットですが、少しコンソールのように見えるという事実はほとんど偶然です。
16ビットの.NETアプリケーションはありません。また、アプリケーションがコンソールモードかどうかは、16ビットか32ビットかに違いはありません。
MS-DOSアプリはntvdmの下で16ビットアプリとして実行されます。
<!> quot; Windowsコンソール<!> quot;アプリケーションはDOSアプリケーションではなく、ネイティブWindowsプロセスとして実行されます(EXEファイルのPEヘッダー内のビットがコンソールアプリケーションとして識別されるため、WindowsはアプリケーションのWindowsコンソールを作成/準備できます)たとえば、CMDまたはPowerShellからコンソールアプリケーションを実行すると、作成済みのコンソールウィンドウが再利用されますが、エクスプローラーでEXEをダブルクリックすると、アプリケーションの新しいコンソールウィンドウが作成されます。)
CMD!= DOS
Windowsコンソール!= DOS
同様に、少なくともWindows 2000(NT5)以降はWindowsに存在する完全なWindowsコンソールAPIがあります(おそらくNT3 / 4のみ)。
.NETコンソールアプリ。 (または他の.NETアプリ)は、JITの対象となるハードウェアとして実行されます。したがって、x86では32ビットになります。
理解したとおり、すべてのDOS cmdウィンドウ(C#コンソールアプリを含む)は32ビットではなく16ビットとして実行されます。
あなたは間違っています。 cmd.exe Windowsはすべて、アーキテクチャに応じて32ビットまたは64ビットです。
DOSは、ほぼ10年前にWindows MEと一緒に死亡しました。
16ビットモードで実行できる.NET VM実装については知りません。 Microsoft .NETランタイムとMonoは両方とも32/64ビットのみです。他の小さなものについては知りませんが、16ビットモードで動作できるかどうかは驚きです。
また、cmd.exeは32ビットWindowsアプリケーションであるため、cmd.exeは32ビットモードで実行されます。一方、command.comは16ビットモードで実行されます。
実際、コンソールアプリケーションは本質的に16ビットとはほど遠いものです。 x86保護モードは32ビットであり、移植モードで実行されるDOS用のゲームまたはアプリケーションは32ビットであるため、これは単に真実ではなく、Windowsの前でも真実ではありませんでした。
.NETでは、UIの種類(またはWindowsサービスのようにUIの欠如)は、アプリケーションの語長に影響しません。デフォルトでは、.NETバイナリはプラットフォームに依存せず、ホストマシンの.NET Framework、カーネルなどのタイプに応じて32ビットまたは64ビットアプリケーションとして実行されます。ただし、64ビットに直接コンパイルすることもできます。
コンソールexeについて特別なことはありません。これは単なるPEファイルです。そのため、コンソールとwinform exeとWindowsサービスに関係なく、コンパイルされたモードで実行されます。
Visual Studioなどは16ビットexeを生成しません。 x86とx64の方がより興味深い;-p
おそらく、あなたの友人には.NET Frameworkがインストールされていない(または1.1のみがインストールされている)。
DOSでも<!> quot; .EXE <!> quot; 16ビットまたは32ビットにすることができます(適切なコーディングまたはDOSエクステンダーライブラリを使用)。
NTVDM.EXEは、CPUが16ビットであり、DOSシステムコールが利用可能であると想定できる環境で16ビット.COM
および.EXE
ファイルの実行をサポートするDOSエミュレーターです。コマンドプロンプトとの唯一の関連付けは、テキストモードDOSプログラムがコンソールウィンドウを使用して、テキストモードでVGA画面のエミュレーションを提供することです。
前述のとおり、DOSで実行できる.NET VMはありません。しかし、Monoプロジェクトのソースから始めて、FreeDOSの下で実行されるものをビルドするのは楽しいかもしれません...ただお友達を怖がらせるために;-)