Python や Ruby の Windows 向けランタイムに含まれている pythonw.exe や rubyw.exe に関して、毎回悩むので PE ヘッダを調べて違いを確認しました。ちなみに w 無し版は実行した時にコンソールが表示されますが、w 有り版はコンソールが表示されません。
とりあえず dumpbin を使ってヘッダーをダンプします。
dumpbin python.exe /headers
それぞれの実行ファイルに対して dumpbin でヘッダーをダンプした結果から、重要な部分だけ引っ張ってきました。結局のところは異なるのは subsystem 部分だけです。
python.exe
OPTIONAL HEADER VALUES 5.00 operating system version 0.00 image version 5.00 subsystem version 0 Win32 version A000 size of image 400 size of headers E816 checksum 3 subsystem (Windows CUI) 8000 DLL characteristics Terminal Server Aware
pythonw.exe
OPTIONAL HEADER VALUES 5.00 operating system version 0.00 image version 5.00 subsystem version 0 Win32 version A000 size of image 400 size of headers BD3E checksum 2 subsystem (Windows GUI) 8000 DLL characteristics Terminal Server Aware
ruby.exe
OPTIONAL HEADER VALUES 4.00 operating system version 1.00 image version 4.00 subsystem version 0 Win32 version 19000 size of image 600 size of headers 2092F checksum 3 subsystem (Windows CUI) 0 DLL characteristics
rubyw.exe
OPTIONAL HEADER VALUES 4.00 operating system version 1.00 image version 4.00 subsystem version 0 Win32 version 19000 size of image 600 size of headers 17A7F checksum 2 subsystem (Windows GUI) 0 DLL characteristics
w 無しは subsystem が 3、w 有りは subsystem が 2 になります。単純にコンソール向けなのか、Windows 向けなのかという話です。
MSDN によるとエントリポイントが main だとコンソール向け、WinMain だと Windows 向けになるとも書いてますね。基本的な Win32 の知識が必要な部分です。
Visual Studio のリンカー設定からサブシステムを変更可能です。
ちなみに Win32 プロジェクトを作るときに選択できます。
そして、それぞれの使いどころなんですが、ぶっちゃけどっちでもいいです。
Process.Start 時にコンソールを表示しないというオプションもあるので、それを使えば w 無し版でもコンソールを表示せずに実行できます。IIS の CGI / FastCGI で使う場合でも、どっちでも良さそうです。
どちらでも良いという結論は微妙な感じなので、CGI / FastCGI など Web 向けに使う場合には他の環境と合わせるために w 無し版を使う方向でいいと思いました。*1
*1:本当にどっちでもいい。