Si está utilizando un HttpListener, usted tiene que utilizar httpconfig.exe o netsh para configurar su HttpListener, porque:
A. Que yo sepa hay ninguna API para hacer esto desde C#, sólo las herramientas de línea de comandos
B. Por defecto único sistema o el grupo Administradores local puede escuchar http prefijos
Así que ... si su aplicación se ejecuta bajo la cuenta del usuario, es necesario conceder acceso explícitamente (mediante httpcfg.exe o netsh) porque su HTTPHandler usa HTTP.sys para compartir puertos con el servidor web en ejecución (para que pueda alojar su propio b aplicación en el puerto 80 mientras IIS se está ejecutando en el puerto 80 también).
Una mejor solución podría ser utilizar un servidor web incorporado para escuchar en el puerto que necesita. Esto no funcionará si otra aplicación (por ejemplo, IIS) ya está utilizando el puerto, pero como NO utiliza HTTP.sys para compartir puertos, no hay restricciones de seguridad sobre qué cuenta de usuario está abriendo/escuchando en el puerto. . Como desea que el usuario especifique su propio puerto, parece aceptable ejecutarlo en otro puerto además del puerto 80.
Mi empresa produce un producto comercial llamado Servidor web Neokernel (http://www.neokernel.com) que ejecuta ASP.NET y le permite programar iniciar/detener el servidor y configurar configuraciones; puede incrustar y distribuir este ensamblaje con la aplicación.
También existe el código fuente de Cassini que puede modificar e incrustar, es gratis pero tiene un par de inconvenientes como la falta de registro o la compatibilidad con SSL.
Supongo que saben que la línea de comandos no iba a funcionar en Windows XP, ¿verdad? –
Sí, por lo que sé, es solo para Vista y Win7 –
Consulte esta pregunta aquí: http://stackoverflow.com/questions/6851161/net-or-win32-equivalent-of-netsh-http-add-urlacl -command Hay una API Win32 para hacer esto. – Travis