HttpListener访问被拒绝?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (140)

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

当我试图执行函数时HttpListener.Start() I get an 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;
                }
            }
        }
    }
}
提问于
用户回答回答于

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

netsh http add urlacl url=http://+:80/MyUri user=DOMAIN\user
用户回答回答于

它必须以更高的特权开始。可以使用runas谓词,它将提示用户切换到管理模式。

static void RestartAsAdmin()
{
    var startInfo = new ProcessStartInfo("yourApp.exe") { Verb = "runas" };
    Process.Start(startInfo);
    Environment.Exit(0);
}

扫码关注云+社区