web-dev-qa-db-fra.com

HTTplisteneException "Accès refusé" pour les non-administrateurs

J'ai écrit une application C # qui utilise HttpListener _ pour écouter les demandes HTTP -Oviblement! Le préfixe de l'espace de noms que j'utilise est également inscrit à l'aide de netsh pour l'utilisateur actuel (comme suggéré par tout le monde à ce sujet).

Le problème est malgré l'utilisation de netsh mon application qui lance toujours un "accès refusé" d'exception pour les utilisateurs non administratifs. Le système d'exploitation est Windows 7.

Mise à jour: il apparaît comme si mon application n'exécute pas la commande netsh lorsque je l'exécute avec un utilisateur non administrateur. Y a-t-il des problèmes avec mon code? Il n'y a pas d'exceptions jetées.

    AddAddress("http://localhost:8400/", Environment.UserDomainName, Environment.UserName);

    HttpListener _listener = new HttpListener();
    _listener.Prefixes.Add("http://localhost:8400/");
    _listener.Start();

    ...

    /** method stolen from an SO thread. sorry can't remember the author **/
    static void AddAddress(string address, string domain, string user)
    {
        string args = string.Format(@"http add urlacl url={0}", address) + " user=\"" + 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();
    }
17
Mossi

La ligne que j'utilise lorsque je fais un HTTplistener est:

netsh http add urlacl url=http://+:8008/ user=Everyone listen=yes

L'utilisateur peut être un utilisateur individuel ou un groupe d'utilisateurs. Donc, si vous voulez que seuls les administrateurs aient accès, par exemple:

netsh http add urlacl url=http://+:8008/ user=Administrators listen=yes

Vous pouvez obtenir de l'aide sur la commande:

netsh http add urlacl help

Notez que le url= est facultatif. En outre, les anciennes versions de la commande nécessitent true ou false pour le paramètre d'écoute. Les versions actuelles utilisent oui ou non.

35
Jim Mischel