新しい記事 ≪≪≪≪≪ トップページ ≫≫≫≫≫ 古い記事

netshの仕様が Windows7 で変わってる

Tweet
Windows Firewallの開閉を制御するコマンドとして、netsh がありプログラムインストール時にお客さんに余計な手間をかけさせないためにインストーラの中で制御していたのだけれど、Windows7になってこれが効かない。
Windows Firewall の仕様が変更されて、内部ネットの場合・外部ネットの場合で選択するようになっているためかと思われるが、参ったな。

プログラムの修正が必要だ。

仕様の変更箇所を調べねば。


通常、
netsh firewall add allowedprogram program = \"%s\" name = \"%s\"
mode = ENABLE profile = ALL
(実際は1行で書きます)
がポート開放で、
netsh firewall delete allowedprogram program = \"%s\" profile = ALL
がポート閉鎖。

Windows XP, Vista の場合これでうまく行っていたんだけど。
Windows 7で調べたら「重要: "netsh firewall"は、使用されなくなりました。代わりに"netsh advfirewall firewall"を使用してください。」との事。(Windows 7 の netsh コマンドの表示より)
なんと!です。実際に手で打ってみても出ますね。

更に同じく netsh コマンドが言うには、「コマンドを使用する詳細については、サポート技術情報の記事947709 (http://go.microsoft.com/fwlink/?linkid=121488)を参照してください。」とのこと。

早速調べてみる。
なになに、Windows Server 2008, Windows Vista から既にこちらになっていて、将来のOSでは廃止されるカモという事は、Windows 7 で廃止されたって事ですか?確かにそうみたいだけど、参ったな。
なら、Vistaで切っとけ!と言いたくもなる。
ま、ちゃんと調べてなかったこっちが悪いと言えば悪いか。

で、よくある例を参考に実際に確認しながら導き出した結論として私が使っていたやつは、
netsh advfirewall firewall add rule program=\"%s\" name=\"%s\"
dir=in action=allow enable=yes profile=any edge=yes
になりそうだ。

profile=any はサンプルには出てこなかったけれど、netsh のヘルプにあった構文には規定されていたので多分これでOK。

そして削除は何とキーが name みたいで、
netsh advfirewall firewall del rule name=\"%s\"
で済むみたい。ただ、ユニークじゃない name だと勝手に削除されてしまう(あるいは、こちらが間違って削除してしまう)リスクがあるという事になる。ある意味危険だ。

一応、Vista から使える訳だが既存の Vista プログラムは既に古い方でやってるので、条件判定は Windows 7 以降という形にしよう。
と、思ったら一部 Vista で互換設定がうまく動作しない事象が発覚。新構文だとうまく行く。
やはり Vista 以降を条件判定にしよう。その方が美しい。
2010年10月30日 17時49分17秒 by miraclecat - カテゴリ:プログラミング



コメント

コメントはありません

コメントの追加

:

:
: