2012-01-05 22 views
12

Mi objetivo es realmente lograr el lanzamiento de mi aplicación ClickOnce con un solo clic (o dos, supongo). La aplicación tiene algunos requisitos previos que deben ser instalados. La forma normal de garantizar que estén instalados y que Microsoft proporcione implica que el usuario decida si tiene los requisitos previos o no, y descarga e instala un "setup.exe" que los instala y ejecuta la aplicación ClickOnce. Esto implica descargar el archivo EXE (un clic), ejecutarlo (dos clics), luego de que se hayan instalado los requisitos previos, hacer clic de nuevo para ejecutar la aplicación ClickOnce.Ejecutando una aplicación ClickOnce desde otra aplicación ClickOnce

Estoy tratando de reducir este proceso a uno o dos clics: - Haga clic en un enlace en mi sitio web al archivo ClickOnce .application. - Haz clic nuevamente para ejecutarlo.

He creado otra aplicación ClickOnce, que incluye un setup.exe. Comprueba si los requisitos previos están instalados y, si lo están, ejecuta la otra aplicación ClickOnce automáticamente. Si no, ejecuta setup.exe incluido y luego ejecuta la otra aplicación ClickOnce.

Mi problema es que cuando intento ejecutar la otra aplicación ClickOnce desde esta, simplemente abre mi navegador web y descarga el archivo .application sin ejecutarlo.

estoy tratando de usar lo siguiente para iniciar la aplicación ClickOnce desde dentro de mi código C#:

Process.Start(ApplicationURL); 

Sólo quiero que esto se inicie automáticamente la aplicación en ApplicationURL. ¿Hay alguna forma de evitar la participación del navegador que estoy viendo?

(Mi pregunta es muy similar a la pregunta sobre el desbordamiento de la pila Run a ClickOnce application from a webpage without user action).

+0

¿Cuál es su navegador predeterminado?¿Has probado: 'Process.Start (" iexplore.exe ", ApplicationURL)'? –

+2

Ok, acabo de encontrar la respuesta a mi propia pregunta. El problema es que mi navegador predeterminado es Google Chrome, que no sabe cómo manejar las aplicaciones de ClickOnce. Cambié mi código a: ProcessStartInfo startInfo = new ProcessStartInfo ("Iexplore"); startInfo.Arguments = ApplicationURL; Process agentStudio = Process.Start (startInfo); Ahora inicia la aplicación utilizando Internet Explorer, y la aplicación ahora realmente funciona como una aplicación de "un clic". – Jschiff

+0

¡Gracias M. Babcock, lo descubrió de forma independiente al responder! – Jschiff

Respuesta

16

Como se señaló en los comentarios, puede iniciar el proceso iexplore.exe para iniciar una aplicación ClickOnce sin ninguna dependencia del navegador predeterminado. También puede iniciar la aplicación ClickOnce de la misma manera que Windows Explorer la inicia, usando dfshim.dll.

Process.Start("rundll32.exe", "dfshim.dll,ShOpenVerbApplication " + ApplicationURL); 

Hay algunos otros artículos en línea que discutir el uso de esta estrategia, pero no se encontró ninguna Documenation oficial de dfshim.dll, ShOpenVerbApplication.

  • Another Stack Overflow question menciones utilizando una costumbre .exe para instalar el .NET Framework y luego lanzar una aplicación ClickOnce a través ShOpenVerbApplication.
  • Scott Hanselman discusses ShOpenVerbApplication como la asignación de archivos predeterminada para archivos con la aplicación/x-ms-application tipo MIME en una publicación sobre Firefox y ClickOnce.

actualización

Como la otra pregunta desbordamiento de pila menciona, también se puede utilizar dfshim.dll 's LaunchApplication comando, que es documented on Microsoft's site. Sin embargo, ese comando no está disponible en algunas versiones anteriores de .NET Framework.

+0

Funcionan muy bien, pero ¿cómo puedo obtener la autenticación? El sitio de SSRS requiere uno, y sin las credenciales falla la descarga de la aplicación. Estoy experimentando con la combinación de InPlaceHostingManager (ya lo sé, le di +1 a @dgp) y un control oculto del navegador web incorporado, pero se ve feo. –

1

Eche un vistazo a Microsoft walkthrough para instalar manualmente a través del InPlaceHostingManager. Usted tiene la capacidad de personalizar programáticamente.

+0

Excelente solución para instalar una aplicación, pero no puede "iniciar" la aplicación. De la documentación: "InPlaceHostingManager puede instalar una aplicación ClickOnce, pero no puede ejecutarla. Algunos métodos en esta clase, como Execute, están reservados para usar al descargar una aplicación basada en Windows Presentation Foundation que se ejecuta dentro de un navegador web". El método dfshim permite la instalación y el inicio. – mikdav

Cuestiones relacionadas