現象
- Windows 7 x64
- コマンドプロンプトからtelnetが使えない
- コントロールパネルからWindowsの機能を有効にしても使えない
- でも稀に使えることがある
- エクスプローラで見ても
telnet.exe
はそこにある
数年前からこの微妙な問題に悩んでおり、git付属のmsysとかcygwinなど他の物を使ってお茶を濁していました。
原因
SuperUserに原因を書いている人がいました。[64bit版のwindowsで32bit版のcmdを使っているせい][so]なのだそうです。
[so]: https://superuser.com/questions/605335/telnet-wont-run-from-cmd-prompt-in-windows-7
64bit版のWindowsには[WOW64][wp]という仕組みがあります。32bitのDLLを64bitアプリから読み込めないことの対策として、32ビットアプリがc:\windows\system32
以下のファイルにアクセスするとc:\windows\SysWoW64
にリダイレクトするのだそうです。こちらには32bit版のDLLが用意されています。
[wp]:https://ja.wikipedia.org/wiki/WOW64
問題は、Telnetクライアントを有効にしても32bit版のtelnet.exeはインストールされない、ということです。
「64bit版でなく32bit版のコマンドプロンプトを使いたい」とわざわざ意識して起動する人はいないと思います。いつの間にか32bit版を使っている、という現象もWoW64のせいです。使っているランチャーが32bitだったりする場合、そのランチャーからはc:\windows\system32\cmd.exe
を起動しようとするとc:\windows\SysWoW64\cmd.exe
がすりかわって起動するのです。
対処法
32bit版のコマンドプロンプトから64bit版のtelnet.exeを起動できないというわけではありません。単にパスが通っていないだけなので、解決方法はこうなります。
-
c:\windows\system32\telnet.exe
をパスの通ったところに手でコピーする
もしくは
-
c:\windows\sysnative\telnet.exe
を直接起動する
そもそもMicrosoft Telnetがここまで手間を掛けて使うほどの物かというと微妙ですが、もやもやが晴れたのでメモしました。
参考リンク
- [Telnet won't run from cmd prompt in windows 7 - SuperUser][so]
- [WOW64 - Wikipedia][wp]