我的应用程序使用小型网络服务器来填写某些文件,并具有远程管理的Web界面。目前,用户必须使用NetSH像这样注册URI

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

对于普通用户来说,这没什么好玩的。我希望该程序能够在我的程序中从我的程序中指定的任何端口聆听,而无需最终用户使用命令提示符。无论如何,是否可以完成仅使用process.start和运行命令提示的简短工作?

有帮助吗?

解决方案

我写了这篇文章来提升perms并通过 网络.

用户将被提示将更改最高的系统更改,但总比没有好。您可能想对此做到这一点 adversAccessDeniedException

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();
    }
}

其他提示

如果您使用的是httplistener,则必须使用httpconfig.exe或netsh配置httplistener,因为:

答:AFAIK没有C#这样做的API,只有命令行工具

B.默认情况下,仅系统或本地管理员组可以收听HTTP前缀

因此...如果您的应用在用户帐户下运行,则需要明确授予访问(使用httpcfg.exe或netsh),因为您的httphandler使用http.sys与运行的Weberver共享端口(因此您可以托管自己的托管端口80上的Web应用程序也在端口80上运行时)。

一个更好的解决方案可能是使用实际嵌入式Web服务器在所需的端口上侦听。如果另一个应用程序(例如IIS)已经使用了端口,这将无法使用,但是由于这不使用http.sys进行端口共享,因此对端口上的用户帐户打开 /侦听的安全限制没有安全限制。因为您希望用户指定自己的端口,所以在端口80以外的另一个端口上运行似乎可以接受。

我公司生产的商业产品称为Neokernel Web服务器(http://www.neokernel.com)运行ASP.NET,可以使您通过编程方式启动/停止服务器并设置配置;您可以使用应用程序嵌入和分发此组件。

还有您可以修改和嵌入的Cassini源代码,它是免费的,但有几个缺点,例如没有记录或SSL支持。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top