是啥导致 Windows 防火墙阻止应用程序?

Posted

技术标签:

【中文标题】是啥导致 Windows 防火墙阻止应用程序?【英文标题】:What causes Windows Firewall to block an application?是什么导致 Windows 防火墙阻止应用程序? 【发布时间】:2010-10-16 13:05:21 【问题描述】:

我有一个在用户桌面上本地运行的 Windows 窗体应用程序。它访问 Internet 的唯一方法是执行 System.Diagnostics.Process.Start(url) 来启动用户的默认浏览器并将其指向各种 URL(检查更新、联系我们等)。如果用户没有通过单击菜单项或按钮明确请求,这一切都不会发生。

在我的机器上,我偶尔会在启动程序时收到 Windows 防火墙警告消息,说 Windows 防火墙已“阻止了程序的某些功能”以保护机器。在 Visual Studio 中运行我的程序时,我偶尔也会收到此警告(警告对话框显示 vshost 已被网络阻止)。它不会一直发生。

我没有从我的任何客户那里听说他们的 PC 上发生过这种情况,但这并不意味着没有。对于不太懂技术的用户来说,这是一个有点可怕的警告,所以我想弄清楚如果可能的话如何消除它。

我的程序可能会做什么来触发此警告?

编辑:我的程序在启动时唯一有点不寻常的事情是它使用 Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase 类来强制执行单实例应用程序。我知道这在幕后做了一些线程魔术来检测新实例并重定向它们。是否有可能因为某种原因在网络上监听?

【问题讨论】:

【参考方案1】:

只有当您的程序正在侦听端口时才会触发 Windows 防火墙 - 有效地充当服务器。 System.Diagnostics.Process.Start 不会触发 Windows 防火墙。

相反,WindowsFormsApplicationBase 可能会导致防火墙警告,因为 WindowsFormsApplicationBase 使用远程处理来感知自身的其他实例。使用反射器,我在 WindowsFormsApplicationBase.Run() 中找到了这段代码:

TcpChannel channel = this.RegisterChannel(secureChannel);
RemoteCommunicator communicator = new RemoteCommunicator(this, this.m_MessageRecievedSemaphore);
string uRI = applicationInstanceID + ".rem";
new SecurityPermission(SecurityPermissionFlag.RemotingConfiguration).Assert();
RemotingServices.Marshal(communicator, uRI);
CodeAccessPermission.RevertAssert();
string uRL = channel.GetUrlsForUri(uRI)[0];
this.WriteUrlToMemoryMappedFile(uRL);
this.m_FirstInstanceSemaphore.Set();
this.DoApplicationModel();

只要您将 WindowsFormsApplicationBase 用于其 SingleInstance 功能,我不知道有任何解决方法。

【讨论】:

就是这样 - 没有任何东西明显在监听任何端口。在 Visual Studio 中和运行已安装的可执行文件时都会出现警告。 有点不寻常的是,我使用 Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase 来强制执行单实例应用程序。这确实在幕后进行线程化;我想知道它是否可以在网络上监听远程进程的东西。 打开命令提示符并在程序运行时运行“netstat -b”,看看它是否正在监听任何端口。

以上是关于是啥导致 Windows 防火墙阻止应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法让 youtube 的所有 IP 地址用 Windows 防火墙阻止它?

安装arcgis显示程序维护

windows smartscreen筛选器已阻止启动

windows防火墙规则有优先级吗

Windows 7防火墙阻止了远程桌面连接的解决方法

windows 系统防火墙 添加端口号方法