2009-06-22 20 views
16

Estoy trabajando en un proyecto implementado con ClickOnce, y estoy atravesando varios problemas.Problemas de implementación de ClickOnce

Hay dos componentes en mi solución de software: un cliente de escritorio que necesita .NET Framework 3.5 para funcionar, y un servidor (ASP.NET aplicación) que enumera los documentos disponibles y proporciona una manera de instalar el cliente de escritorio con ClickOnce.

Mi primer problema es el requisito previo: necesito una forma de instalar el marco 3.5 antes de la instalación del cliente. Visual Studio crea un setup.exe que se ocupa de eso, pero para que funcione, debe ejecutarse directamente (en lugar de vincularse al archivo .application), y se debe conocer la implementación URL al crear el manifiesto ClickOnce.

Tengo dos problemas más: aparentemente no hay forma de ejecutar la aplicación cliente con argumentos de cadena de consulta después de instalarlo con setup.exe, así que en lugar de tener un servidor que muestre la lista de documentos vincule a una URL como "... /client.application?document=doc1 "Solo puedo tener un enlace al setup.exe.

El otro problema es el peor: el servidor está destinado a ser utilizado en redes privadas relativamente pequeñas, y no en un solo servidor web. El problema es que no conozco la URL de despliegue del cliente ClickOnce en tiempo de compilación, por lo que el setup.exe no se puede ejecutar correctamente cuando la opción "instalar desde un sitio web" está marcada. Por ahora, la solución consiste en tener un instalador sin conexión que contenga el setup.exe, los requisitos previos y los archivos de implementación ClickOnce en un gran archivo ZIP.

Un usuario con la versión de marco adecuada todavía puede usar el enlace .application con querystring en el documento para instalar/actualizar el cliente y abrir el documento. Un usuario sin el marco recibe un mensaje de error ("Actualización del sistema requerida blablabla 3.5.0.0 blabla GAC"), y tiene que descargar el archivo ZIP, lo extrae en su máquina local y ejecuta el archivo setup.exe para instalar el marco, y luego el cliente. Y después de eso, tiene que regresar a la lista de documentos y usar el enlace para iniciar al cliente con los argumentos adecuados.

No hace falta decir que no estoy muy orgulloso de esta estrategia, que arruina todas las ventajas de implementación de ClickOnce.

¿Es posible deshacerse de los problemas de requisitos previos de una manera más elegante? ¿Existe una manera simple de modificar la URL de instalación de la aplicación ClickOnce al implementar el servidor en una red (como escribir la URL en un archivo de configuración o algo así)?

+0

sobre los requisitos previos, tuve que cambiar la URL utilizada para buscar los archivos descargados ("setup.exe -url = http: //my.application.com") no funcionó en el primer intento con los requisitos previos descargado desde la misma ubicación que mi aplicación debido a la configuración del servidor web: los tipos mime no se registraron para msp y msu, por lo que setup.exe no pudo obtener los archivos de requisitos previos –

+3

Una pequeña sugerencia es intentar hacer preguntas únicas en StackOverflow como es más fácil para las personas leer y dirigir. También es difícil aceptar respuestas parciales que lo hacen injusto para aquellos que quieran ayudarlo. Si necesita proporcionar más contexto, puede vincularlo con sus otras preguntas para ayudarlo a proporcionar información sobre el conjunto de problemas que enfrenta. – jpierson

Respuesta

6

Yo también he estado tratando de resolver el problema "No sé la URL de despliegue del cliente de clickonce en el momento de la compilación".

Lo mejor que puedo encontrar (apenas comencé a escribirlo, así que esto todavía es especulación) es escribir una utilidad que ejecutará el usuario final que establecerá el deploymentURL. Esto parece ser posible en .NET, pero es necesario:

  • Leer en el manifiesto con ManifestReader.ReadManifest
  • establecer el DeploymentUrl
  • ManifestWriter.WriteManifest

Entonces usted tiene que firmar el manifiesto nuevamente usando SecurityUtilities.SignFile

El proceso de firma me molesta. O tengo que usar un certificado desechable (lo que hace que la firma no tenga sentido) o necesito usar un certificado de una CA y luego tengo que distribuir mi contraseña para renunciar al manifiesto (lo cual es estúpido porque hace que mi certificado no sea seguro) . Así que me parece que estoy izquierda con el usuario vea "editor desconocido" y un signo de exclamación amarillo ...

+0

gracias! No estaba seguro de poder distribuir mage.exe con mi aplicación, pero su solución es más simple y mejor. sobre el signo de exclamación amarillo: en la medida en que funciona, estoy de acuerdo con que –

+0

mago redistribuidor probablemente no esté permitido. No parece estar en ninguna lista de redistribuibles de MS que pueda encontrar. MS es bastante estricto sobre lo que puede y no puede ser redistribuido. – GrendleM

+0

Básicamente he tenido el mismo problema al tener que decidir usar mi propio certificado generado automáticamente o un certificado de confianza. Otra opción que he considerado y dejado abierta es que los clientes proporcionen su propio certificado cuando lo use mi servidor de implementación basado en ASP.NET, que es el responsable de renunciar y cambiar la marca, y todo eso. Por lo tanto, al menos nuestros clientes aún tienen opciones, pero desafortunadamente no podemos usar opciones como la opción "Usar el manifiesto de la aplicación para la confianza" y todavía tenemos alguna marca personalizada en el manifiesto de implementación. Si no necesita cambiar la marca, sugeriría esa opción. – jpierson

5

el fin de construir aplicaciones ClickOnce en nuestro sistema de integración continua y desplegar a varios servidores de prueba, pasé algún tiempo con Mage y el artículo Walkthrough: Manually Deploying a ClickOnce Application.

No estoy seguro de si esto resolverá su segundo problema, pero al menos puede aliviar el proceso de compilación si se implementa en varios servidores. Si puede distribuir mage.exe (no estoy seguro si Microsoft lo permite), puede modificar sus manifiestos en el sitio durante la instalación.

0

Quizásse podría aprovechar para automatizar el cambio de la URL de implementación. Lo uso para automatizar mis compilaciones ClickOnce y cambiar la versión de compilación del manifiesto. ClickOnce with NAnt describe cómo lo hice.

+0

El enlace "ClickOnce with NAnt" está roto. –

+0

Esta parece ser la nueva url: http://aaronsprague.com/blog/post/Automate-ClickOnce-with-Nant.aspx – BlackICE

0

Si los usuarios están en un dominio, entonces tendré el sysadmin push .NET 3.5 usando Group Policies/Windows Update o cualquier otra estrategia que se esté usando para administrar los escritorios.

Suena como un problema de entorno. Si la organización es lo suficientemente grande como para tener un administrador del sistema, entonces debe ser responsabilidad de esa persona proporcionar un entorno para que la aplicación se ejecute.

Si la organización no tiene una persona en este puesto, creo que ha vuelto a su solución manual. Además, hacerlo manualmente no necesariamente rompe 'todas las ventajas de ClickOnce' ... Las ventajas de ClickOnce es que puede modificar el cliente, volver a publicar y las máquinas del cliente se actualizarán automáticamente ...

Supongo que el Otra opción es escribir un script que obtenga e instale .NET 3.5 y luego instale la aplicación, no lo he hecho antes ... Estoy razonablemente seguro de que funcionaría ... En realidad, podría implementar un script de inicio a través de Políticas grupales que obtienen .NET 3.5 también, eso sería muy simple.

0

Segunda pregunta:

Puede utilizar el MSBuild publicar objetivo en un proyecto, solución o MSBuild el archivo de esta manera:

C:\WINDOWS\Microsoft.NET\Framework\v3.5\msbuild.exe "C:\path\foo.vbproj" /target:Publish /property:"PublishUrl=http://clickonce/is/kinda/cool/" /property:"PublishUrl=http://clickonce/is/kinda/cool/" 

PublishUrl es la ubicación en la que se publicó la aplicación en el IDE. Se inserta en el manifiesto de la aplicación ClickOnce si no se especifica ni la propiedad InstallUrl ni UpdateUrl.

InstallUrl (no se muestra) es el lugar donde los usuarios instalarán la aplicación. Si se especifica, este valor se graba en el iniciador setup.exe si la propiedad IsWebBootstrapper está habilitada. También se inserta en el manifiesto de la aplicación si no se especifica UpdateUrl.

Primera pregunta:

Si la respuesta anterior no se ocupa de sus necesidades, entonces me parece que se enfrentan a un problema típico; ¿Cómo se puede obtener un ejecutable de Windows (en su caso, .NET Framework 3.5) instalado en varios escritorios.Hay varias soluciones como Group Policy (GP) scripts o WMI.

1

Tal vez una solución sería:

Uso publishUrl = http: // ClickOnce/es/un poco/frío y en el equipo cliente modificar el archivo hosts de Windows situado en
% windir% \ system32 \ drivers \ etc \ hosts y apunte el host clickonce a la dirección IP fija del servidor.

Tal vez ClickOnce debería tener una opción para detectar el servidor desde donde se descargó la aplicación; Si alguien sabe, publique aquí;

Cuestiones relacionadas