当前位置:  开发笔记 > 运维 > 正文

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

如何解决《是什么导致Windows防火墙阻止应用程序?》经验,为你挑选了1个好方法。

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

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

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

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

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



1> Greg..:

只有当您的程序正在侦听端口时才会触发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功能,我就不知道如何解决这个问题.

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有