【问题标题】:AddressAccessDeniedException : resolve it without netsh?AddressAccessDeniedException : 在没有 netsh 的情况下解决它?
【发布时间】:2025-11-30 06:30:02
【问题描述】:

我遇到了异常AddressAccessDeniedException,因为我的进程没有注册URL的权限。我首先以管理员身份运行我的程序:好的,它成功了。

但我现在想要分发我的应用程序,并且我希望每个用户都能够运行它而无需成为管理员。

有没有办法自动授予用户访问权限?

我看到了命令:

netsh http add urlacl url=http://+:8000/ user=DOMAIN\UserName

我应该使用它吗?如果是,怎么做?

我想做的是在没有管理员身份的情况下授予访问权限...这样说,看起来很愚蠢,但可能...

【问题讨论】:

    标签: c# wcf http user-permissions


    【解决方案1】:

    这是不可能的。 Windows 使用内核驱动程序来处理 HTTP 请求,并且在此驱动程序上打开侦听器由 ACL(访问控制列表)保护。如果您想打开侦听器以便您的应用程序可以侦听来自其他计算机的请求,您必须以管理员身份运行它以通过 ACL,或者您必须具有权限(= 您必须在 ACL 中)。您还可以关闭 UAC(用户访问控制)以绕过这些检查。

    netsh 是一个工具,允许您为 HTTP.sys(内核驱动程序)设置 ACL。您可以授予任何用户在选定端口上侦听的权限,但显然您必须是管理员才能授予这些权限,或者您必须有权为已配置的权限委派权限,否则此安全性的全部意义将不复存在。

    netsh 调用添加到您的安装包中,并要求以管理员身份完成安装(这对于许多应用程序来说很常见)。另请注意,netsh 仅适用于 Windows Vista、Windows 7、Windows Server 2008 和 Windows Server 2008 R2。对于 Windows 2003 和 Windows XP(至少需要 SP2),您需要另一个名为 httpcfg 的工具,它不是操作系统安装的一部分(必须单独安装)。

    【讨论】:

    • 噢...所以,我只是在尝试做一些不可能的事情?顺便说一句,谢谢你的解释,看来我必须使用netsh!谢谢;)
    • 用户可能想要更改作为服务帐户运行的 Windows 服务的端口。服务帐户不应该是管理员,对吧?有没有办法为服务帐户授予对 HTTP.sys 的完全权限 - 完全管理员权限的子集。我只能看到 netsh 允许保留某些端口。在更改端口或拥有单独的可执行文件或批处理后需要命令行命令似乎不必要地复杂。
    最近更新 更多