Jon*_*way 38 .net permissions windows-vista
我正在使用HttpListener来允许用户在用户定义的端口上设置代理.当我启动HttpListener时,如果应用程序未在Vista中以管理员权限运行,则会出现异常.
根据我的阅读,这是预期的行为 - 开始侦听端口需要管理员权限.但是我确信有很多方法可以解决这个问题,因为我运行了大量的程序(如Skype),这些程序可以监听端口而无需升级到管理员.
有没有办法用HttpListener做到这一点?如果没有,我可以在.NET代码中进行其他API调用来设置端口吗?
Rog*_*mbe 66
虽然您可以使用普通的TCP/IP编写自己的HTTP服务器(它相对简单),但使用HttpListener更容易,它利用了Windows XP SP2中添加的HTTP.SYS功能.
但是,HTTP.SYS添加了URL ACL的概念.这部分是因为HTTP.SYS允许您绑定到端口80上的子命名空间.直接使用TCP/IP可以避免此要求,但这意味着您无法绑定到已在使用的端口.
在Windows XP上,您可以使用HttpCfg.exe程序设置URL ACL,授予您的用户帐户绑定到特定URL的权限.它位于Platform SDK示例中.
在Windows Vista上,仍支持HTTPCFG,但该功能已被NETSH吸收:
netsh http show urlacl
...将显示现有URL ACL的列表.ACL以SDDL表示.
netsh http add urlacl url=http://+:80/MyUri user=DOMAIN\User listen=yes
...将配置MyURI名称空间,以便DOMAIN\User可以侦听请求.
Lu5*_*u55 22
如果您只需要处理来自您自己的计算机的请求(通常用于测试目的),您可以在前缀中编写localhost而不是*.
例如,您可以编写"http:// localhost:9669 /"而不是"http://*:9669 /".这适用于HttpListener并且不需要管理权限(至少在Windows 7上).
Gre*_*ill 10
我从来没有使用过HttpListener,但是根据你的描述,它听起来更像是你想要在常规的TCP端口上监听,而不是将你的应用程序嵌入到服务器URL命名空间中(这就是HttpListener似乎要做的).您应该能够使用常规套接字函数(System.Net.Sockets.TcpListener)来打开和侦听TCP端口,而无需管理员权限.我几乎可以肯定Skype不会使用HttpListener.
小智 7
好吧,我不得不处理类似的事情.我的电脑位于受限制的域中,因此我没有管理员权限.经过一些研究和阅读后,我发现这个线程和netsh提示让我使用临时acl绑定只是为了开发测试.在我的计算机上存在这些规则.
有这个条目:
运行'netsh http show urlacl'(如上图所示)
    [...]
        Reservierte URL            : http://+:80/Temporary_Listen_Addresses/
            Benutzer: \Jeder
                Abhören: Yes
                Delegieren: No
                SDDL: D:(A;;GX;;;WD)
    [...]
所以我可以使用HttpListener作为非管理员(Jeder):
    [...]
    HttpListener l = new HttpListener();
    string prefix = "http://+:80/Temporary_Listen_Addresses/";
    l.Prefixes.Add(prefix);
    l.Start(); // does not throw any "Permission Denied/Access Denied/Zugriff verweigert"
    [...]
这可以帮助任何人找到这个帖子.
| 归档时间: | 
 | 
| 查看次数: | 32936 次 | 
| 最近记录: |