質問

クイックテストコンソールアプリをビルドするときに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の下で実行されるものをビルドするのは楽しいかもしれません...ただお友達を怖がらせるために;-)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top