ClickOnce应用程序和Windows防火墙

And*_*erd 15 clickonce firewall windows-firewall

在我看来,ClickOnce应用程序无法与Windows防火墙一起顺利运行.

我已成功使用ClickOnce部署两年.现在,企业已升级到Windows 7,这已成为绊脚石.每个用户的配置都已更改:

  • 在每个用户的计算机上启用Windows防火墙
  • 用户在其计算机上没有管理员权限.

以下是ClickOnce的工作原理:每次更新ClickOnce应用程序时,都会将可执行文件复制到新目录中.该目录具有机器生成的名称.(例如,它可能部署到"C:\ Users\andrew.shepherd\AppData\Local\Apps\2.0\GTTG5EJB.AVG\jc69hir.e45\watershedclient.exe").

默认情况下,Windows防火墙会阻止应用程序接受传入呼叫.但是,当应用程序首次尝试此操作时,Windows防火墙会弹出一个对话框,允许管理员为应用程序创建例外,为其提供所需的权限.

问题是,Windows防火墙将应用程序记录存储为完整文件路径.每次更新ClickOnce应用程序时,它都会安装到其他目​​录.因此,Windows防火墙将其视为一个全新的应用程序.管理员现在必须为其更新的每台计算机配置此更新的防火墙.这有效地打败了我们使用ClickOnce技术的全部原因.

这在2005年被标记为一个问题,微软承认了这个问题,并承认没有解决方案.

这个问题已经解决了吗?

red*_*alx 4

问题是,Windows 防火墙将应用程序记录存储为完整文件路径。每次更新 ClickOnce 应用程序时,它都会安装到不同的目录。因此,Windows 防火墙将其视为一个全新的应用程序。

这里的一种方法是编辑规则名称,使其仅指定 EXE 的名称而不是完整路径。例如,我本地部署的“Hello World”应用程序是由 ClickOnce 安装在此路径上的:

C:\Users\jdoe\AppData\Local\Apps\2.0\BNYJV8NM.JT8\DGEMYJV2.ZN7\hell..tion_32be098505965508_0001.0000_ad51d60d7593998b\HelloWorld.exe
Run Code Online (Sandbox Code Playgroud)

并且可以使用仅适用于“HelloWorld.exe”的防火墙规则。然而,这会产生一个安全漏洞,因为该规则适用于具有该名称的任何应用程序。我们可以通过指定一些路径来进一步细化规则:

%LOCALAPPDATA%\Apps\2.0\BNYJV8NM.JT8\DGEMYJV2.ZN7\*\HelloWorld.exe
Run Code Online (Sandbox Code Playgroud)

请注意,我还使用了一个环境变量,该变量显然是为了测试防火墙规则而扩展的。