• Quitar avisos de Windows 10 al instalar con ClickOnce

    Pues eso… que el otro día estaba probando en mi equipo con Windows 10 la instalación con ClickOnce de una aplicación y era un rollo la de preguntas que te decía, que si te está protegiendo, que no confía en la aplicación, y cosas así (ver figura 1).

    Figura 1. Aviso de Windows 10 al instalar con ClickOnce desde un sitio Web
    Figura 1. Aviso de Windows 10 al instalar con ClickOnce desde un sitio Web

    La solución es simple.

    Pero debes hacerlo en el equipo en el que se va a instalar la aplicación.

    Panel control>opciones internet>Seguridad>Sitios de confianza>sitios (agregar la dirección web)

    Abre el Panel de Control, (si no lo tienes a mano abre Inicio y escribe «panel» y te lo mostrará), selecciona Opciones de Internet (si no ves las opciones de internet, pulsa en Redes e Internet) se mostrará una ventana como la de la figura 2.

    Figura 2. Propiedades de Internet.
    Figura 2. Propiedades de Internet.

    Pulsa en la pestaña Seguridad, a continuación en Sitios de confianza y en el botón Sitios. Te mostrará una ventana nueva con los Sitios de confianza (figura 3).

    Figura 3. Sitios de confianza.
    Figura 3. Sitios de confianza.

    Si tu sitio no es https quita la marca de abajo a la derecha donde dice «Requerir comprobación del servidor (https:) para todos los sitios de esta zona«.

    Escribe el nombre de tu sitio en «Agregar este sitio web a la zona de:» (sin el http:// ni https://) y pulsa en el botón Agregar.

    Cierra todas las ventanas y ya no tendrás más avisos como el de la figura 1 (y otros parecidos) cuando se vuelva a instalar (o actualizar) algo desde el sitio que has indicado.

    Y ya está… Smile

    Espero que te sea de utilidad.

    Nos vemos.
    Guillermo

  • En breve cerraré los foros del Guille

    Pues eso.,.. me refiero a la página: http://foros.elguille.info/ no al blog, ni al sitio ni la página de Facebook Winking smile

    Ya han pasado unos 15 años desde que los puse en marcha (hubo antes otras versiones de los foros, pero me refiero al que está actualmente ¿activo?) y no hay prácticamente movimiento, ni por mi parte… así que… si no cambio de opinión… el 31 de enero de este año 2019 será el último día que se podrá postear en los foros de elGuille.info… y a partir del 1 de febrero de 2019 serán de solo lectura (o solo para consultar y ver los hilos), porque quitarlo no lo voy a quitar, ya que sé que hay respuestas válidas, y muchas… Si acaso quitaré visibilidad a los hilos que no han obtenido respuesta, más que nada para que no aparezcan en los buscadores, que no es plan que alguien busque algo y le aparezca solo la pregunta sin respuesta (que suele ocurrir en muchos foros, jeje).

    Los foros de elGuille.info pasarán a solo lectura el 1 de febrero de 2019
    Los foros de elGuille.info pasarán a solo lectura el 1 de febrero de 2019

    Pues eso… si quieres dar tu opinión, puedes darla en este hilo.

    Gracias.

    Nos vemos.
    Guillermo

  • DoEvents para aplicaciones WPF

    Pues eso… que en las aplicaciones de Windows Presentation Foundation (WPF) no podemos usar el equivalente a DoEvents de Windows Forms, simplemente porque no existe esa funcionalidad para WPF, pero no te preocupes porque aquí te explico cómo crear un método DoEvents listo para usar en las aplicaciones de WPF, por supuesto con el código del VB y C#.

    Yo utilizo DoEvents en las ocasiones que quiero refrescar la pantalla (formulario o ventana) de la aplicación, por ejemplo cuando se está haciendo un proceso largo para que no se quede congelada la aplicación.

    Y anoche me ocurrió eso mientras ejecutaba una aplicación (de WPF) que me fabriqué para copiar el contenido de una lista de canciones (PlayList tipo m3u) en una carpeta. Y como el disco usado para guardar los MP3 era un disco externo, pues… aparte de que eran muchas canciones (354), pues… parecía que la aplicación fallaba, ya que no mostraba la canción que estaba copiando y… pues eso… que hasta yo pensé que me había equivocado escribiendo el código… Angel

    Así que… sabiendo que DoEvents no está definido en WPF y después de probar con que tampoco hay Refresh en los controles de WPF, probé con Thread.Sleep que no solucionó el problema (y no era plan de crear un temporizador), así que… ¡a buscar en Internet!

    Y dio resultado la búsqueda, concretamente en esta página:
    Implement Application.DoEvents in WPF, ¿el problema? ninguno, salvo que, como suele ocurrir por los interneses, todo está con ejemplos para C#, así que… a convertir el código encontrado.

    Este es el código de esa página para simular el DoEvents (en C#):

    public static void DoEvents()
        {
            Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Background,
                    new EmptyDelegate(delegate{}));
        }
    
    

    En otra parte del código debes tener la definición de EmptyDelegate:

    private delegate void EmptyDelegate();
    

    No me sonó demasiado a chino mandarín ya que algo parecido usé hace muuuuuuchos años para llamar a otro control desde el método de evento de un temporizador:
    24- Acceder a un control desde un evento de un timer, pero ya ni me acordaba Eye rolling smile

    Y esta es la versión para Visual Basic .NET:

    ' Adaptado de:
    ' http://www.java2s.com/Tutorial/CSharp/0470__Windows-Presentation-Foundation/
    '   ImplementApplicationDoEventsinWPF.htm
    
    Private Delegate Sub EmptyDelegate()
    
    Private Sub DoEvents()
        Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Background,
                                            New EmptyDelegate(Sub()
                                                              End Sub))
    End Sub
    

    Te tienes que fiar de mi palabra, pero sin el DoEvents, al pulsar en el botón Copiar la aplicación parece como si se hubiese colgado… hasta pasado un buen rato no termina… (Figura 1)

    Figura 1. Sin el DoEvents, después de pulsar en Copiar la aplicación se queda congelada
    Figura 1. Sin el DoEvents, después de pulsar en Copiar la aplicación se queda congelada

    Sin embargo, poniendo el DoEvents, se va mostrando el progreso de copia. Y de eso se trata… que se vea lo que está haciendo Winking smile

    Pues… ¡ya está! esto es todo…

    Nos vemos.
    Guillermo