在写程序的时候,经常遇到被防火墙拦截的情况,尤其是一些网络程序,不管是对外访问还是外部连接,都会被拦截。

在大多情况下,Windows会静默拦截外部对内的连接访问,而内部对外的访问会提示用户信息。

现在我们需要把自己的程序加入到防火墙的例外之中去,好让程序之间能够正常通信。

第一种方法是读写注册表的方式:

XP下是这几个键值(有的时候貌似只用2个键就行,但情况不同,最保险的方式是这4个键都写):

  1. 1.  HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/SharedAccess/Parameters/FirewallPolicy/StandardProfile/AuthorizedApplications/List
  2. 2.  HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Services/SharedAccess/Parameters/FirewallPolicy/StandardProfile/AuthorizedApplications/List
  3. 3.
  4. 4.  HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/SharedAccess/Parameters/FirewallPolicy/DomainProfile/AuthorizedApplications/List
  5. 5.  HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Services/SharedAccess/Parameters/FirewallPolicy/DomainProfile/AuthorizedApplications/List

而在Window7下略有不同,是这几个键:

  1. 1.  HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/services/SharedAccess/Parameters/FirewallPolicy/FirewallRules
  2. 2.  HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/services/SharedAccess/Defaults/FirewallPolicy/FirewallRules
  3. 3.  HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/services/SharedAccess/Defaults/FirewallPolicy/FirewallRules
  4. 4.  HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/services/SharedAccess/Parameters/FirewallPolicy/FirewallRules

第二种方式是使用命令操作,这种方式保险性最高,适用性也高:

同样在XP下的命令:

  1. 1.  netsh firewall add allowedprogram //增加例外

而在Window7下这个命令虽然也可以,可系统提示不要使用这个,于是换成这个更保险(由于系统UAC的缘故):

  1. 1.  netsh advfirewall firewall

其中的选项可以选择(XP和win7相同,但具体用法略有不同):

  1. 1.  ?              - 显示命令列表。
  2. 2.  add            - 添加防火墙配置。
  3. 3.  delete         - 删除防火墙配置。
  4. 4.  dump           - 显示一个配置脚本。
  5. 5.  help           - 显示命令列表。
  6. 6.  reset          - 将防火墙配置重置为默认值。
  7. 7.  set            - 设置防火墙配置。
  8. 8.  show           - 显示防火墙配置。
  9. 9.  若需要命令的更多帮助信息,请键入命令,
  10. 10. 后面跟 ?。

具体使用可以直接敲入命令,会显示帮助信息,帮助中带有示例程序。

所以,你可以再你的程序中这么使用:

  1. “cmd.exe /s /c “netsh advfirewall firewall add rule name = /"MySQL/" dir=in program = /"G://Program Files//MySQL//mysql//bin//mysql.exe/" security=authnoencap action=allow/””               //win7下添加mysql到防火墙例外中

在支持脚本的安装程序中,也可以直接调用,比如在winXP下,使用NSIS做安装包这么写:

  1. nsExec::ExecToLog 'netsh advfirewall firewall add rule name = "MySQL" dir=in program = "$PROGRAMFILES/MySQL/mysql/bin/mysql.exe" action=allow'

可以达到同样效果。

对于删除和修改,可以查看这个命令的帮助:

  1. 1.  C:/Documents and Settings/Administrator>netsh firewall delete
  2. 2.  下列指令有效:
  3. 3.  此上下文中的命令:
  4. 4.  delete allowedprogram - 删除防火墙允许的程序配置。
  5. 5.  delete portopening - 删除防火墙端口配置。
  6. 6.  C:/Documents and Settings/Administrator>

然后根据里面的说明和详细例子去使用。

http://blog.csdn.net/blpluto/article/details/5979684

在防火墙的例外中注册程序(Windows7和XP),改写注册表的更多相关文章

  1. VB编写的程序加入防火墙的例外中

    在工程中要先引入: NetCon 1.0 Type Library NetFwTypeLib Option Explicit Const NET_FW_SCOPE_ALL = 0 Const NET_ ...

  2. 2017-03-03 Oracle在.Net中出现未在本地计算机上注册“OraOLEDB.Oracle”提供程序的错误

    在前面的Oracle配置完成后,打开项目运行出错,出现未在本地计算机上注册“OraOLEDB.Oracle”提供程序的错误,看到“注册”两个字,首先想到,难道还要用命令行注册一下?果不其然,需要手动注 ...

  3. c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程

    c#Winform程序调用app.config文件配置数据库连接字符串 你新建winform项目的时候,会有一个app.config的配置文件,写在里面的<connectionStrings n ...

  4. 以向VS 程序打包集成自动写入注册表功能为例,介绍如何实现自由控制安装过程

    最近由于项目部署时需要更灵活的控制程序安装的流程以及自定义安装行为,特意研究了一下VS程序打包,把解决办法和大家分享一下. 以VS2010为例: 这是一个已经设置好最基本的Visual Studio ...

  5. Window 注册程序关联后缀文件,双击运行

    一般来说,很多软件都会有自定义后缀的文件,比如.cpp..doc等,那么如果我们想把这些后缀与我们的软件关联起来,如何做呢 #pragma once #include "StdAfx.h&q ...

  6. VBA中自定义类和事件的(伪)注册

    想了解一下VBA中自定义类和事件,以及注册事件处理程序的方法. 折腾了大半天,觉得这样的方式实在称不上“注册”,所以加一个“伪”字.纯粹是瞎试,原理也还没有摸透.先留着,有时间再接着摸. 做以下尝试: ...

  7. C语言中的程序终止函数

    在C语言的标准库<stdlib.h>中提供了一些与正常或者不正常的程序终止有关的函数,下面分别对其进行简单介绍. 参考文献: [1] C和指针,P298,342 [2] C程序设计语言现代 ...

  8. C# 32位程序访问64位系统注册表

    原文:C# 32位程序访问64位系统注册表 我的上一篇文章已经阐述了“32位程序和64位程序在64位平台上读\写注册表的区别”,那么接下来将要回答上篇所留下来的一个问题:32位程序如何访问64位系统注 ...

  9. Android逆向破解表单注册程序

    Android逆向破解表单注册程序 Android开发 ADT: android studio(as) 程序界面如下,注册码为6位随机数字,注册成功时弹出通知注册成功,注册失败时弹出通知注册失败. 布 ...

随机推荐

  1. 【转】linux命令useradd添加用户详解

    在linux中增加用户我们使用useradd命令而删除用户直接使用userdel即可了,下面小编来给各位同学介绍一下在linux中添加与删除用户方法吧.   1.作用 useradd或adduser命 ...

  2. ZOJ 3603字符串操作

    解题思路:找到公共子串然后升序输出 坑的地方就在于输入是存在相同字母的 #include <stdio.h> #include <algorithm> #include < ...

  3. JAVA_2Lesson

    package test; public class abc { public static void main(String[] arg) { int[][] xx=new int[3][]; xx ...

  4. Swift 与 Objective-C混合编程

    在Swift项目中想要同一时候加入Objective-C的库支持或者须要同一时候用Objective-C编程 在加入新的文件时选择Objective-C系统就会自己主动生成一个xx-Bridging- ...

  5. Linux安装完Tomcat后无法登陆管理界面

    今天在Linux中安装完Tomcat后无法登陆Tomcat的管理界面,也就无法利用Tomcat管理界面来部署项目. 在Windows中一般配置完Tomcat后,只要在[conf]目录下的“tomcat ...

  6. Java基础07 包

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 我们已经写了一些Java程序.之前的每个Java程序都被保存为一个文件,比如Tes ...

  7. linux scp传文件

    一.输入 scp 201207.tar.gz root@192.1001.122:/backup 二.输入密码:abc123 注解: scp 201207.tar.gz :将要传输的文件 root : ...

  8. 类似QtiPlot的veusz,sigmaplot,pymol

    qtiplot在win下没那么好编译 依赖很多外部包的 scidavis 和 labplot是从他fork出来的 比较接近Origin 可以用这两个 FreeBSD 的 ports 里有直接 cd / ...

  9. 利用VS2005进行dump文件调试(17篇博客)

    前言:利用drwtsn32或NTSD进行程序崩溃处理,都可以生成可用于调试的dmp格式文件.使用VS2005打开生成的DMP文件,能很方便的找出BUG所在位置.本文将讨论以下内容: 1.  程序编译选 ...

  10. 《UNIX环境高级编程》笔记--read函数,write函数,lseek函数

    1.read函数 调用read函数从文件去读数据,函数定义如下: #include <unistd.h> ssize_t read(int filedes, void* buff, siz ...