什么原因会导致Windows防火墙阻止应用程序?

17
我有一个 Windows Forms 应用程序,在用户的桌面上本地运行。它访问互联网的唯一方式是通过执行 System.Diagnostics.Process.Start(url) 来启动用户默认浏览器并指向各种 URL(用于检查更新、联系我们等)。而且除非用户明确通过点击菜单项或按钮请求,否则所有这些都不会发生。
在我的机器上,我偶尔会在启动程序时收到 Windows 防火墙警告消息,说 Windows 防火墙已“阻止了某些功能”,以保护计算机。当我在 Visual Studio 中运行我的程序时,有时也会收到此警告(警告对话框表示 vshost 已被网络阻止)。这并不总是发生。
我没有听说过我的任何客户在他们的 PC 上出现了这种情况,但这并不意味着没有。对于不那么技术娴熟的用户来说,这是一个有点可怕的警告,因此我想找出如何消除它(如果可能的话)。
我的程序可能是什么触发了这个警告?
编辑:我的程序在启动时唯一有点不寻常的事情是它使用 Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase 类来强制实施单实例应用程序。我知道这在幕后进行一些线程魔法来检测新实例并重定向它们。它可能正在出于某种原因监听网络吗?
1个回答

8

仅当您的程序监听端口(有效地充当服务器)时,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功能,我不知道有任何绕过此问题的方法。

1
这就是问题所在 - 没有任何明显的东西在任何端口上监听。警告在Visual Studio内部和我运行安装的可执行文件时都会出现。 - Jesse Smith
有一件有点不寻常的事情是,我使用Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase来强制实现单个实例应用程序。它在后台执行线程操作;我想知道它是否可以监听网络以进行远程进程操作。 - Jesse Smith
1
打开命令提示符并在程序运行时运行“netstat -b”以查看它是否正在侦听任何端口。 - Greg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接