none
Aplicacion de Windows Form genera error 10013 en Windows 7 pero no en Windows XP

    Pregunta

  • Hola tengo una aplicación creada por mi que recibe paquetes UDP los procesa y responde un ACK si es necesario que funciona perfecto en Windows XP pero no en Windows 7.

    La idea es que debe escuchar en un determinado puerto y luego responde desde el mismo puerto pero al asignar el mismo puerto (bind de puerto) al thread que responde salta el error.

    Lo raro es que funcione perfecto en Windows XP y no en Windows 7.

    Ya probé deshabilitar el firewall de Windows y desactivar la protección en tiempo real ademas de correr el programa en modo administrador.

    La cuenta de usuario incluso es de administrador.

    Tengo incluso en el código seteado ExclusiveAddressUse = False

    ¿Alguna idea de que puede estar ocurriendo?


    The Real Blue


    viernes, 30 de septiembre de 2016 15:46

Respuestas

  • Muy probablemente te hayas topado con el UAC (User Access Control), que existe en WIndows 7 pero no en Windows XP. El UAC hace que a pesar de que el usuario sea administrador, tu programa se ejecute SIN priviliegios de administrador. Y para abrir un puerto a la escucha, de manera predeterminada se requieren privilegios administrativos, por lo que tu programa da un error debido al recorte de permisos realizado por el UAC:

    Hay varias soluciones:

    - Una es conceder permisos sobre el puerto que estés usando al usuario que ejecuta la aplicación. Lamentablemente, no existe ninguna interfaz gráfica para hacer esto y tiene que hacerse tecleando una compleja línea de parámetros en el comando NETSH. Por suerte esto solo hay que hacerlo una vez, y ya recuerda los permisos en lo sucesivo.

    - Otra solución es acordarse de lanzar siempre la aplicación con el botón derecho y "Ejecutar como administrador" (sí, en Windows 7 hay que hacer esto incluso aunque el usuario YA sea administrador).

    - Para no hacer eso de forma manual todas las veces, se puede añadir un Manifiesto al programa (es una opción entre los Items del proyecto en Visual Studio) que por dentro exija la elevación de privilegios.

    viernes, 30 de septiembre de 2016 18:23
  • ¿Existe alguna diferencia entre correr el programa como administrador y la linea NETSH que mencionas?

    Exactamente la misma diferencia que cuando no tienes permiso para abrir un fichero que está en disco. Una opción es acceder con permisos de administrador y abrir el fichero, y otra es cambiar los permisos del fichero y dejar que lo abran los usuarios no administradores. Con el puerto pasa lo mismo: se puede abrir como administrador, o se puede dar permiso a alguien que no sea administrador (solo que, a diferencia de los ficheros a los que se les pueden cambiar los permisos desde el Explorador de archivos, en cambio a los puertos hay que darles permiso con el comando NETSH).

    No guarda absolutamente ninguna relación el hecho de que el programa esté o no esté en una carpeta de sistema. Los permisos los hereda del usuario que lo ejecuta, no de la carpeta en la que está ubicado. Y si el usuario es Administrador, el UAC de Windows impide que herede sus permisos administrativos.

    El manifiesto no consigue nada distinto de lo de hacer click derecho y seleccionar "ejecutar como administrador". Los permisos finales son los mismos.

    viernes, 30 de septiembre de 2016 21:15

Todas las respuestas

  • Muy probablemente te hayas topado con el UAC (User Access Control), que existe en WIndows 7 pero no en Windows XP. El UAC hace que a pesar de que el usuario sea administrador, tu programa se ejecute SIN priviliegios de administrador. Y para abrir un puerto a la escucha, de manera predeterminada se requieren privilegios administrativos, por lo que tu programa da un error debido al recorte de permisos realizado por el UAC:

    Hay varias soluciones:

    - Una es conceder permisos sobre el puerto que estés usando al usuario que ejecuta la aplicación. Lamentablemente, no existe ninguna interfaz gráfica para hacer esto y tiene que hacerse tecleando una compleja línea de parámetros en el comando NETSH. Por suerte esto solo hay que hacerlo una vez, y ya recuerda los permisos en lo sucesivo.

    - Otra solución es acordarse de lanzar siempre la aplicación con el botón derecho y "Ejecutar como administrador" (sí, en Windows 7 hay que hacer esto incluso aunque el usuario YA sea administrador).

    - Para no hacer eso de forma manual todas las veces, se puede añadir un Manifiesto al programa (es una opción entre los Items del proyecto en Visual Studio) que por dentro exija la elevación de privilegios.

    viernes, 30 de septiembre de 2016 18:23
  • Gracias por responder, lo de correr el programa como administrador ya lo hice, incluso el ejecutable no esta en una de las carpetas de sistema en la que no permiten que los programas escriban ni un simple LOG.

    ¿Existe alguna diferencia entre correr el programa como administrador y la linea NETSH que mencionas?

    Si es así me interesaría probar si esto lo soluciona.

    El tema del archivo manifiesto ya estuve leyendo incluso antes de escribir esta consulta pero no termino de entender como se hace y si es lo mismo que correr el programa como administrador entonces creo que no funcionaria porque, como dije, ya lo he intentado.


    The Real Blue

    viernes, 30 de septiembre de 2016 20:30
  • ¿Existe alguna diferencia entre correr el programa como administrador y la linea NETSH que mencionas?

    Exactamente la misma diferencia que cuando no tienes permiso para abrir un fichero que está en disco. Una opción es acceder con permisos de administrador y abrir el fichero, y otra es cambiar los permisos del fichero y dejar que lo abran los usuarios no administradores. Con el puerto pasa lo mismo: se puede abrir como administrador, o se puede dar permiso a alguien que no sea administrador (solo que, a diferencia de los ficheros a los que se les pueden cambiar los permisos desde el Explorador de archivos, en cambio a los puertos hay que darles permiso con el comando NETSH).

    No guarda absolutamente ninguna relación el hecho de que el programa esté o no esté en una carpeta de sistema. Los permisos los hereda del usuario que lo ejecuta, no de la carpeta en la que está ubicado. Y si el usuario es Administrador, el UAC de Windows impide que herede sus permisos administrativos.

    El manifiesto no consigue nada distinto de lo de hacer click derecho y seleccionar "ejecutar como administrador". Los permisos finales son los mismos.

    viernes, 30 de septiembre de 2016 21:15
  • ¿Porque tanto apuro en marcar las respuestas como validas?

    Yo no he dicho que alguna haya solucionado mi problema.

    En todo caso ¿No debería ser yo el que decida cual es la respuesta que me sirve?


    The Real Blue

    domingo, 2 de octubre de 2016 16:46