15

在我看来,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 年被标记为问题,微软承认了这个问题并承认没有解决方案。

这个问题已经解决了吗?

4

1 回答 1

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

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

%LOCALAPPDATA%\Apps\2.0\BNYJV8NM.JT8\DGEMYJV2.ZN7\*\HelloWorld.exe

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

于 2013-02-15T13:55:41.743 回答