コンソールアプリケーションとDOSアプリケーションを見分ける
WindowsコンソールアプリケーションとMS-DOSアプリケーションを見分ける方法を紹介。
Windowsコンソールアプリケーション(以下コンソールアプリ)とMS-DOSアプリケーション(以下DOSアプリ)はWindows上はどちらもコマンドプロンプト上で動作するという点で同じだが、根本的には全く異なるもの。
しかしMS-DOSやWindows 9x時代のMS-DOSプロンプトからの流れでコマンドプロンプト上で実行するアプリをまとめてDOSコマンドなどと呼ぶ人が多く、
それが混乱を引き起こす要因になっている。
コンソールアプリとDOSアプリの動作の仕組みとその違いは以下のページを参考にするとよい(上級者向け)
- 情報科学のあれこれ(7) : コンピュータの中を見てみよう(その2) - DOSアプリとコンソールアプリのそれぞれについてとても詳しく説明されている。
- Windows 7 / Windows Server 2008 R2: Console Host - コンソールアプリとWindowsカーネルとの関係やWindows 7のconhost.exeによるセキュリティ強化について説明されている。
- EXEファイルの内部構造 (PEヘッダ) (2/3) : CodeZine - Windows Vista,7ではSubsystemに14種類の値を定義しているが、その中にコンソールアプリの定義が含まれている。Windowsは実行ファイルのPEヘッダーにあるSubsystemの値からGUIアプリとコンソールアプリを判別する。
ここではコンソールアプリとDOSアプリを見分けるためのそれぞれの特徴をいくつか紹介する。
・DOSアプリはプロパティ画面のタブの数が多い。
コンソールアプリ
DOSアプリ
実行ファイルを右クリック→プロパティ を開くとDOSアプリはタブの数が多いことがわかる。
これはDOSアプリにはMS-DOSエミュレーションの設定を行う項目があるためである。
Windowsが実行ファイルをDOSアプリだと認識すると、プロパティにMS-DOSエミュレーションに関する設定項目を表示する。
・DOSアプリは自動でショートカットが作成される。
DOSアプリを実行したりプロパティを開いたりすると同じフォルダーにショートカットが勝手に作られる。
これは先に述べたMS-DOSエミュレーションの設定を保存するため。
・コンソールアプリをメモ帳などのテキストエディターで開くと先頭付近に「This program cannot be run in DOS mode.」という文が見える。
コンソールアプリ
DOSアプリ
コンソールアプリは32ビットまたは64ビットのWindowsアプリケーションであり、16ビットOSであるMS-DOSでは動作しない。
WindowsアプリケーションはMS-DOSで実行すると「This program cannot be run in DOS mode.」というメッセージを表示して終了するようになっている。
このプログラムが先頭に埋め込まれているので、テキストエディターで開くとこのメッセージが見える。
一方DOSアプリにはそのようなメッセージは見当たらない。
・DOSアプリを実行すると英語環境に切り替わる (Windows Vista以降)
コンソールアプリ
DOSアプリ
Windows Vista以降ではMS-DOSの日本語環境(日本語モード)が削除されている。
その代わりにDOSアプリを実行しようとすると英語環境(海外仕様のMS-DOS)に切り替えて処理が行われる。
英語環境は日本語環境とフォントや画面モードが異なるため、ウィンドウの大きさやフォントが切り替わる。
またMS-DOSにはフォルダー・ファイル名は8文字(+拡張子3文字)までという制限があり、Windows上では名前が長いフォルダー・ファイルに対して一定の法則で「短い名前」が付けられている。
MS-DOSモード時はファイルアクセスに「短い名前」を利用するため、上の画像の例では「Documents」が「DOCUME~1」になっている。
ちなみに「chcp 932」を実行すると日本語環境のコマンドプロンプトに戻ることができる(Windows 7では自動で戻る。)
・DOSアプリは日本語のメッセージが文字化けする (Windows Vista以降)
コンソールアプリ(Windows Vista)
DOSアプリ(Windows XP)
DOSアプリ(Windows Vista)
先に述べたようにWindows Vista以降でDOSアプリを実行すると強制的に英語環境に切り替わる。
そのため日本語環境で作成されたDOSアプリの全角文字のメッセージや罫線などは文字化けする。
場合によってはフリーズして強制終了させられる。
日本語環境での文字コードはコードページ932いわゆるShift_JISだが、このShift_JISの第1バイトにあたる部分は英語環境のコードページ437では西ヨーロッパ言語の文字が割り当てられている。
また、日本語環境のDOSと英語環境のDOSはソフトウェア的には互換性はあるものの画面表示の仕組みは全く異なるもので、
製品版MS-DOS/VではCHEVコマンドで日本語モードと英語モードを切り替えるようになっていた。
(つまり日本語環境のDOSと英語環境のDOSは、根は別物だということ。細かい事情はWikipedia「DOS/V」を参照。)
こういった事情があり、英語環境オンリーのDOSでは日本語を扱うことはできない。
ちなみに逆の例もあり、英語環境で作成されたDOSアプリ(海外のDOSアプリ)を日本語環境で実行すると罫線文字などが文字化けする。
この場合はCHEVコマンドやCHCPコマンドで英語環境に切り替えればいいのでさほど問題にはならない。
Vista以降では勝手に英語環境に切り替わるのでなおさら問題ない。
○関連
・XPモードで16ビットアプリケーションを利用する [Win7]
https://diarywind.com/blog/e/g13_133_xp16_win7.html