我的组织生产一套使用networking的Windows应用程序,所以当用户第一次运行我们的软件时,Windows防火墙(如果正在运行)会popup一个窗口,通知用户我们的应用程序)正试图使用networking,提示用户允许或拒绝访问。
这与其他许多应用程序(Spotify,举一个例子)发生,但是我们希望阻止这些popup窗口的发生,因为它们可能对我们的用户有点问题。 一些应用程序(MSN Messenger,GoogeTalk)在没有引起防火墙提醒用户的情况下运行,我们也想这样做。
我们已经通过让我们的安装程序在以下位置写入适当的registry项,
HKLM \ SYSTEM \ ControlSet001 \服务\ SharedAccess \参数\ FirewallPolicy \ StandardProfile \ AuthorizedApplications \目录
但是,这在Windows 7上并不具有相同的效果 – 防火墙popup窗口仍然存在。
任何想法我们如何能做到这一点? (我们的安装程序和软件都是数字签名的。)
谢谢汤姆戴维斯
您可以通过将netsh (内置于Windows的实用程序)进行脱壳来为Windows防火墙添加例外情况,但该实用程序在Windows XP和Windows 7上的工作方式不同。以下是我使用的命令:
add: netsh firewall add allowedprogram mode=ENABLE profile=ALL name=[exception name] program=[program path]
删除: netsh firewall delete allowedprogram profile=ALL program=[program path]
添加: netsh advfirewall firewall add rule action=allow profile=any protocol=any enable=yes direction=[in|out] name=[exception name] program=[program path]
删除: advfirewall firewall delete rule profile=any name=[exception name]
我实际上建议不要让这个安装程序的问题有几个原因:
那里有多个软件防火墙; 你不能编码和测试所有的人。
有些(如内置的windows防火墙)有API,当FW禁用时,不允许你配置端口异常。
如果用户稍后启用FW,则您再次被洗涤。
可能有外部防火墙,仍然让你。
相反,我更愿意将此作为文档工作,以便用户和管理员充分了解网络要求。 我曾经不得不去苹果的网站上找出iTunes需要的端口,我向上帝发誓,他们真的很难找到,因为他们试图软化消费者的一切。
但是,如果您想在安装过程中给予其最大的努力,则WiX具有自定义操作扩展,用于与防火墙进行交互,而不用编写自己的自定义操作。 即使您正在使用其他工具(如InstallShield),也可以将此行为包装在WiX合并模块中,然后将其用于主要工具。
你可以在这里阅读:
安装博客的喜悦
和
WiX文档
在您的安装程序(即提升的管理员)中,您需要编写代码来访问Windows防火墙API并将您的应用程序添加为例外