ClickOnce应用程序和Windows防火墙

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

这个问题已经得到解决吗?


我目前正在审查ClickOnce的功能,这似乎是一个主要问题,使我不建议使用它,因为我们的应用程序使用端口80通过SOAP/XML服务调用与HTTP服务器通信。 - redcalx
@locster 我不确定在同一主题上循环链接未回答的问题对帮助用户找到答案有什么作用。 - Dan Bechard
@redcalx:顺便说一下,硬编码端口80是一个非常糟糕的想法... - SamB
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

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

我尝试了两种方式,一种是没有路径的.exe文件,另一种是在%LOCALAPPDATA%下正确设置了路径。但两种方式都无法运行(Windows 8.1)。 - Henno Vermeulen
@HennoVermeulen 如果完全禁用防火墙,它是否可以正常工作?即该问题是否确实是由防火墙引起的? - redcalx
1
@redcalx 很遗憾,由于群组策略的限制,这是不可能的,但我几乎可以确定它是可行的。我已经在群组策略中设置了此规则,并且我可以看到正确的规则已经在防火墙中。然而,Windows 会弹出一个防火墙警告来提示我的应用程序。我需要管理员权限才能接受这个警告,然后应用程序才能正常工作。如果我按取消,应用程序就会被阻止。很不幸,这是普通用户唯一被允许做的事情。 - Henno Vermeulen
听起来你需要一个Windows防火墙专家和/或某种调试工具来跟踪哪些防火墙规则正在被调用。也许是组策略导致你的额外规则被忽略了(?) - redcalx
1
微软:(在该部分的末尾注释中)“我们目前仅支持使用应用程序的完整路径创建的规则。” - Billy
显示剩余2条评论

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