不使用 netsh 注册 URI 的 C# HttpListener

标签 c# windows http httplistener netsh

我的应用程序使用一个小型网络服务器来提供一些文件,并有一个用于远程管理的网络界面。现在用户必须像这样使用 netsh 来注册 URI

netsh http add urlacl url=http://+:1233/ user=Chris-PC\Chris

这对普通用户来说毫无乐趣可言。我希望该程序能够监听用户从我的程序指定的任何端口,而无需最终用户使用命令提示符。除了仅使用 Process.Start 并自己运行命令提示符之外,还有什么方法可以完成这个任务吗?

最佳答案

我写这篇文章是为了提升权限并通过 netsh 添加 http ACL 条目。

系统会提示用户对他们的系统进行更改,但总比没有好。您可能想要执行此操作以响应 AddressAccessDeniedException

public static class NetAclChecker
{
    public static void AddAddress(string address)
    {
        AddAddress(address, Environment.UserDomainName, Environment.UserName);
    }

    public static void AddAddress(string address, string domain, string user)
    {
        string args = string.Format(@"http add urlacl url={0} user={1}\{2}", address, domain, user);

        ProcessStartInfo psi = new ProcessStartInfo("netsh", args);
        psi.Verb = "runas";
        psi.CreateNoWindow = true;
        psi.WindowStyle = ProcessWindowStyle.Hidden;
        psi.UseShellExecute = true;

        Process.Start(psi).WaitForExit();
    }
}

关于不使用 netsh 注册 URI 的 C# HttpListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2583347/

相关文章:

python - 如何在 Python 中访问我的 iPhone 文件(通过 USB)?

http - 对动态短网址使用 301/303/307 重定向

java - Spring Integration Java DSL - 如何调用 int-http :outbound-gateway?

c# - 强制 C# 应用程序编译为 x64 而不是 AnyCpu

c# - 在后台代码中设置按钮样式

python - 如何将 ffmpeg 的 -progress 选项输出重定向到 stderr?

.net - 如何在通知区域创建丰富的工具提示和丰富的气球

.net - 如何使用 HTTP Get 调用 WCF web 服务

c# - "Doesn' 尝试连接到域时没有访问域所需的权限

c# - 使用自定义查询选择其 ID 存在于 ID 列表中的项目