.net winforms clickonce smartclient

Errores/errores del despliegue de ClickOnce/smart-client en.NET



winforms smartclient (11)

Tengo varias aplicaciones .NET Windows Forms que estoy preparando para convertir en un escenario de despliegue ClickOnce / smart-client. He leído los tutoriales sobre este tema, pero ¿hay trampas o "trampas" que deba conocer?

Hay varias aplicaciones menores que se usan de vez en cuando, pero la aplicación principal está en C #, funciona 24/7, es bastante grande, pero solo cambia cada pocas semanas. También escribe en un archivo de registro localmente y habla con dispositivos de hardware locales.


Aquí hay algunos de los que tengo conocimiento.

  1. No se puede poner un icono en el escritorio. Tu puedes ahora.

  2. No puedo instalar para todos los usuarios.

  3. Necesito pasar por aros para mover la implementación a un servidor diferente. No es un problema si se está desarrollando internamente, y los usuarios pueden ver el servidor en el que se está publicando o si se está implementando en la web pública, pero no es bueno si necesita implementarse en varios sitios de clientes de forma independiente.

  4. Desde .NET 3.5 SP1 ya no es necesario que firme el manifiesto de implementación, lo que hace que sea mucho más fácil mover implementaciones a nuevos servidores.

  5. No puedo instalar ensamblajes en el GAC . Puede evitar esto creando paquetes de instalación regulares que son requisitos previos de la aplicación ClickOnce.


En caso de que alguien se refiera a esto en una búsqueda, hemos encontrado muchos clientes preocupados por la falta de seguridad de ''distribuir'' su aplicación. La aplicación debe estar disponible en una ubicación pública, sin autenticación, para que pueda verificar si hay actualizaciones. La única excepción es si tiene autenticación de Windows NT. Creo que Asegurar aplicaciones ClickOnce explica a qué me refiero.

Los iconos de escritorio son bastante triviales para hacer a través de código, y como se mencionó, con 3.5 SP1 , integrado - por lo que ya no es un problema.

Todavía hay un error no corregido con el xmlSerializer; en algunos casos, no se despliega correctamente. Una solución fácil es agregar manualmente este archivo a la implementación. PITA, pero es bastante fácil ... Puede ser impactante cuando tu despliegue falla repentinamente ...


Hay muchas cosas que no puede hacer con las aplicaciones ClickOnce, como instalar un acceso directo al escritorio del usuario o tener alguna pregunta sobre dónde se instala la aplicación. Para algunas personas estos son tratos de acuerdo.

También ha pasado un tiempo desde que lo usé, pero hay una manera especial que puede usar para descubrir y mostrar el número de versión / versión de ClickOnce, que es independiente del número de versión / versión de la aplicación. Tienes que hacer un try / catch y si el número de versión / build de ClickOnce arroja una excepción, la aplicación no se está ejecutando como una aplicación desplegada ClickOnce (es decir, se está ejecutando como una aplicación compilada regularmente o desde Visual Studio).

Para una aplicación que es simple (es decir, no es Microsoft Word , sino una aplicación rápida y sucia para hacer algo) y necesita una gran cantidad de implementación regular, ClickOnce es genial. Pero, en lugar de eso, golpeas rápidamente la pared de "oh, esto no puede hacerse con ClickOnce, por favor elige MSI u otra cosa".



No puede desinstalar silenciosamente las aplicaciones implementadas de ClickOnce. También creo que es imposible agregar parámetros al atajo de inicio.


No puede instalar si el cliente está detrás de un proxy que requiere autenticación.


No sabía que SP1 le permitió crear el ícono del escritorio. Así es como lo hemos estado haciendo (ahora conocido como "el camino difícil"):

try { string company = string.Empty; string product = string.Empty; if (Attribute.IsDefined(asm, typeof(AssemblyCompanyAttribute))) { AssemblyCompanyAttribute asCompany = (AssemblyCompanyAttribute)Attribute.GetCustomAttribute(asm, typeof(AssemblyCompanyAttribute)); company = asCompany.Company; } if (Attribute.IsDefined(asm, typeof(AssemblyProductAttribute))) { AssemblyProductAttribute asProduct = (AssemblyProductAttribute)Attribute.GetCustomAttribute(asm, typeof(AssemblyProductAttribute)); product = asProduct.Product; } if (!string.IsNullOrEmpty(company) && !string.IsNullOrEmpty(product)) { string desktopPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), product + ".appref-ms"); string shortcutPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Programs), Path.Combine(company, product + ".appref-ms")); File.Copy(shortcutPath, desktopPath, true); } } catch { // Shortcut could not be created }


Teníamos una aplicación que íbamos a implementar como una aplicación ClickOnce. Necesitábamos que el usuario pudiera modificar algunas configuraciones en la instalación (como la ruta de implementación: TI quiere servir los archivos desde su red compartida, desconocidos en tiempo de compilación). Cuando cambia alguno de los archivos en su despliegue, necesita volver a calcular todos los hash y volver a firmar todo. Por lo tanto, si esta solución es interna, es posible que no tenga problemas para pasar un certificado de firma, pero si esto es para clientes, deberá diseñar una solución elegante para eludir este problema.

He escuchado rumores desde algún lugar dentro de las entrañas de los internets que una versión futura de ClickOnce eliminará parte de este dolor de cabeza.


Tendrás menos acceso al sistema que tu aplicación .NET normal.

Eso es porque obtendrás un nivel de confianza más bajo. Más sobre esto en .NET Framework Developer''s Guide: ClickOnce Deployment and Security .

Mi mayor problema con eso fue que no es posible cifrar secciones de tu archivo de configuración con la clave del equipo, porque no tienes acceso a esa clave (cuando lo piensas, tiene sentido proteger esa clave).


Una de las trampas con ClickOnce es el hecho de que no puede instalar en el GAC . Este es un problema si desea instalar varias aplicaciones que comparten archivos DLL. Cada aplicación requerirá una copia local de los archivos DLL. Además, las instalaciones de múltiples usuarios están fuera. Consulte la lista que compara Window Installer con ClickOnce .


  • Cuando se implementan las actualizaciones, el diálogo incorporado hará que parezca como si toda la aplicación se volviera a descargar. De hecho, solo se están descargando las DLL cambiadas, y la barra de progreso que se muestra es engañosa / errónea. No pierda el tiempo tratando de descubrir por qué todas las asambleas se están redistribuyendo solo para descubrir que en realidad no lo están. No es que haya hecho eso ni nada.
  • Cuando el certificado que usó para firmar el manifiesto de implementación original expira y se le entrega uno nuevo, se encontrará con un mundo de daños (los clientes deberán desinstalarlo y reinstalarlo). Los detalles están en la boca del caballo .