我正在用c#编写一个HTTP服务器。

当我尝试执行函数HttpListener.Start(),我得到一个HttpListenerException说

“拒绝访问”。

当我在windows 7的管理模式下运行应用程序时,它工作得很好。

我可以让它在没有管理模式的情况下运行吗?如果是,怎么做? 如果不是,我怎么能使应用程序更改为管理模式后开始运行?

using System;
using System.Net;

namespace ConsoleApplication1
{
    class Program
    {
        private HttpListener httpListener = null;

        static void Main(string[] args)
        {
            Program p = new Program();
            p.Server();
        }

        public void Server()
        {
            this.httpListener = new HttpListener();

            if (httpListener.IsListening)
                throw new InvalidOperationException("Server is currently running.");

            httpListener.Prefixes.Clear();
            httpListener.Prefixes.Add("http://*:4444/");

            try
            {
                httpListener.Start(); //Throws Exception
            }
            catch (HttpListenerException ex)
            {
                if (ex.Message.Contains("Access is denied"))
                {
                    return;
                }
                else
                {
                    throw;
                }
            }
        }
    }
}

当前回答

如果你想使用“user=Everyone”标志,你需要根据你的系统语言来调整它。在英语中,如前所述:

netsh http add urlacl url=http://+:80/ user=Everyone

在德语中是:

netsh http add urlacl url=http://+:80/ user=Jeder

其他回答

我也遇到过类似的问题。如果你已经保留了url,那么你必须首先删除url以非管理模式运行,否则它将失败,访问是拒绝错误。

netsh http delete urlacl url=http://+:80

语法对我来说是错误的,你必须包括引号:

netsh http add urlacl url="http://+:4200/" user=everyone

否则我收到“参数不正确”

如果使用http://localhost:80/作为前缀,则可以侦听http请求,而不需要管理权限。

默认情况下,Windows定义了以下每个人都可以使用的前缀: http://+:80/Temporary_Listen_Addresses/

所以你可以通过以下方式注册你的HttpListener:

Prefixes。Add (http://: 80 - Temporary_Listen_Addresses + Guid NewGuid()。" - " D " ToString () +;

这有时会导致Skype等软件在默认情况下尝试使用80端口时出现问题。

是的,你可以在非管理模式下运行HttpListener。您所需要做的就是将权限授予特定的URL。如。

netsh http add urlacl url=http://+:80/MyUri user=DOMAIN\user

文档在这里。