windowsでポートに常駐しているプログラムを特定して解除する

netstatを利用してポートに先客がいた場合に何が常駐しているか調べる方法です。
私の場合はnginxを起動しようとしたときにエラーがでて、
404 not found エラーが出ず、DNSなんちゃらというエラーが出たので
常駐しているプログラムを調べる方法を探してみました。

webサーバ起動時のエラー

nginxを入れようとして起動すると

C:\nginx>nginx
nginx: [emerg] bind() to 0.0.0.0:80 failed (10013: An attempt was made to access
 a socket in a way forbidden by its access permissions

webブラウザで確認

アクセスが拒否されとるということで、
http://localhost/ へアクセス

Bad Request (Invalid Hostname)

直前にIISを入れて、サービスを停止していたのですが何故か動いているようでした。
IISをアンインストールして再起動してもnginxが起動しない現象が続きました。

netstatにて常駐プログラムの特定

ポートの専有を調べるためにnetstatコマンドを利用。

>netstat
.....
TCP    hoge:http   hoge.hogehogehoge.co.jp:1224  TIME_WAIT
....

なにかがhttpポート(80番)で動いていることが確認。
httpポートで動いているプロセスを調べるために -oa オプションを利用すればいいらしい

>netstat -oa
Proto  Local Address   Foreign Address  State            PID
TCP    hostname:http  hostname:0         LISTENING  1884

ここのPIDを確認する。
タスクマネージャ > プロセスタブ を開いてPIDを確認する。
PIDが出てない人はプロセスタブを開いた状態で上部の 表示 > 列の選択を開いてPIDにチェックを入れる。

MsDepSvcの停止

自分の場合には「MsDepSvc.exe」が80番ポートで動作していました。
いれた覚え無いんですけどIISと一緒に入ってしまった?
誰だよと思って調べるとWeb 配置エージェント サービスとういものらしい。

停止方法1(コマンドプロンプトで入力)


>sc start msdepsvc


停止方法2(サービス管理ツールから停止)

マイコンピュータのアイコン右クリック > 管理 > サービス
Web Deployment Agent Swervice 停止

停止後 nginxを起動。
http://localhost/ へアクセス。
無事にアクセスできました。

参考

netstatでリッスンしているプロセスを特定する
http://www.atmarkit.co.jp/fwin2k/win2ktips/236portcheck/portcheck.html
リモートサービスの管理
http://technet.microsoft.com/ja-jp/library/dd569053%28WS.10%29.aspx