1

クイックテストコンソールアプリを作成しているときにNTVDM.exeについて読んでいたところ、このEXEについて不平を言っている友人のマシンでクラッシュしました。

私が理解しているように、すべてのDOSコマンドウィンドウ(C#コンソールアプリを含む)は、32ビットではなく16ビットとして実行されます。

これは本当ですか?これは、すべてのWorksコンソールアプリのバックオフィスアプリが、32ビットを最大限に活用するのではなく、16ビットとして実行されていることを意味しますか?

Windowsサービスはどうですか?コンソールアプリとして作成し、Windowsサービスとして実行させたと思いますか?

ありがとう

4

9 に答える 9

10

x86用にコンパイルされた.NETアプリはすべて32ビットになります

C#コンソールアプリは、OSと.NET Frameworkに応じて、「実際の」dosでは実行されません(32ビットまたは64ビット環境で実行されます)。

于 2008-12-04T09:29:08.703 に答える
6

私が理解しているように、すべてのDOSコマンドウィンドウ(C#コンソールアプリを含む)は、32ビットではなく16ビットとして実行されます。

これは本当ですか?

いいえ、まったくありません。

DOSアプリケーションはWindowsで実行でき、16ビットですが、少しコンソールのように見えるという事実は、ほとんど偶然です。

16ビットの.NETアプリケーションはありません。アプリケーションがコンソールモードであるかどうかは、16ビットであるか32ビットであるかに違いはありません。

于 2008-12-04T09:33:19.753 に答える
4

MS-DOS アプリは、ntvdm の下で 16 ビット アプリとして実行されます。

「Windows コンソール」アプリケーションは DOS アプリケーションではなく、ネイティブの Windows プロセスとして実行されます (EXE ファイルの PE ヘッダーのビットがコンソール アプリケーションとして識別されるため、Windows はアプリケーションの Windows コンソールを作成/準備できます)。たとえば、CMD または PowerShell からコンソール アプリケーションを実行すると、既に作成されているコンソール ウィンドウが再利用されますが、エクスプローラーで EXE をダブルクリックすると、アプリケーション用の新しいコンソール ウィンドウが作成されます。)

CMD != DOS

Windows コンソール != DOS

同様に、少なくとも Windows 2000 (NT5) 以降 (おそらく NT3/4 のみ) から Windows に存在する完全な Windows コンソール API があります。

于 2009-09-25T08:28:16.483 に答える
2

.NETコンソールアプリ。(または他の.NETアプリ)は、JITされた対象のハードウェアと同じように実行されます。したがって、x86の場合は32ビットになります。

于 2008-12-04T09:30:09.307 に答える
2

私が理解しているように、すべてのDOSコマンドウィンドウ(C#コンソールアプリを含む)は、32ビットではなく16ビットとして実行されます。

あなたは間違っている。すべてのcmd.exeWindowsは、アーキテクチャに応じて32ビットまたは64ビットです。

DOSはほぼ10年前にWindowsMEと一緒に死にました。

于 2008-12-04T09:33:54.417 に答える
1

16ビットモードで実行できる.NETVMの実装については知りません。Microsoft.NETランタイムとMonoはどちらも32/64ビットのみです。他の小さいものについてはわかりませんが、16ビットモードで動作できるとしたら驚きます。

また、cmd.exeは32ビットのWindowsアプリケーションであるため、cmd.exeは32ビットモードで実行されます。一方、command.comは16ビットモードで実行されます。

実際、コンソールアプリケーションは本質的に16ビットではありません。x86プロテクトモードは32ビットであるため、これは単に真実ではなく、Windows以前でも真実ではありませんでした。したがって、移植モードで実行されるDOS用のゲームまたはアプリケーションは32ビットです。

.NETでは、UIの種類(またはWindowsサービスのようにUIがないこと)は、アプリケーションの単語の長さに影響しません。デフォルトでは、.NETバイナリはプラットフォームに依存せず、ホストマシンの.NET Framework、カーネルなどのタイプに応じて、32ビットまたは64ビットのアプリケーションとして実行されます。それらは64ビットに直接コンパイルすることもできますが。

于 2008-12-04T09:33:57.553 に答える
0

コンソールexeについて特別なことは何もありません。それは単なるPEファイルです。したがって、コンソール、winform exe、Windowsサービスに関係なく、コンパイルされたモードに関係なく実行されます。

VisualStudioなどが16ビットのexeを生成することはありません。x86とx64の方が面白いです;-p

おそらく、友達には.NET Frameworkがインストールされていません(または1.1しかインストールされていません)。

于 2008-12-04T09:33:29.003 に答える
0

NTVDM.EXE は、CPU が 16 ビットであり、DOS システム コールが使用可能であると想定できる環境で、16 ビット.COMおよびファイルの実行をサポートする DOS エミュレータです。.EXEコマンド プロンプトとの唯一の関連は、テキスト モードの DOS プログラムがコンソール ウィンドウを使用してテキスト モードで VGA 画面のエミュレーションを提供することです。

前述のとおり、DOS で実行できる .NET VM はありません。しかし、Mono プロジェクトのソースから始めて、FreeDOS で動作するものをビルドするのは楽しいかもしれません...友達を怖がらせるだけです ;-)

于 2009-02-26T01:22:54.550 に答える
0

DOS でも、".EXE" は 16 ビットまたは 32 ビット (適切なコーディングまたは DOS 拡張ライブラリを使用) である可能性があります。

于 2008-12-04T12:30:01.630 に答える