Cómo iniciar un EXE desde la página web (asp.net)

Esta es una aplicación web interna en la que nos gustaría que las páginas web contengan enlaces a varias utilidades que son Win32 EXE. Los EXEs son confiables y producidos por nosotros. (no importa si pregunta si está bien ejecutar o guardar). Intenté un enlace directo (por ejemplo, C: \ notepad.exe) que funciona solo localmente. (Esto será compartido en la red). Intentó archivo: /// y no funcionó. IE7 es el navegador necesario.

¿Qué tal algo así como:

Don't download this file! 

Esto supone que el exe está en algún lugar que conoces en la computadora del usuario:

 Launch the executable  

Documentación: ActiveXObject , Exec Method (Windows Script Host) .

Puedes ver cómo iTunes lo hace usando Fiddler para seguir la acción cuando usas el enlace: http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=80028216

  1. Descarga un archivo js
  2. En Windows: el archivo js determina si iTunes se instaló en la computadora o no: busca un componente de navegador X activo si IE, o un complemento de navegador si FF
  3. Si iTunes está instalado, el navegador se redirige a una URL con un transporte especial: itms: // …
  4. El navegador invoca el controlador (provisto por el exe de iTunes). Esto incluye iniciar el exe si aún no se está ejecutando.
  5. iTunes exe usa el rest de la URL especial para mostrar una página específica al usuario.

Tenga en cuenta que el exe, cuando está instalado, instaló controladores de protocolo URL para el transporte “itms” con los navegadores.

No es un proyecto de ingeniería simple para duplicar, pero definitivamente factible. Si continúa con esto, considere hacer el software relevante de código abierto.

En Windows, el protocolo especificado para la aplicación se puede registrar en el Registro. En este documento msdn, se muestra cómo registrar una aplicación en un esquema de URI.

Por ejemplo, se debe iniciar un archivo ejecutable ‘alert.exe’. El siguiente artículo puede ser registrado.

 HKEY_CLASSES_ROOT alert (Default) = "URL:Alert Protocol" URL Protocol = "" DefaultIcon (Default) = "alert.exe,1" shell open command (Default) = "C:\Program Files\Alert\alert.exe" 

Entonces puedes escribir un html para probar

  alter   alert  

Como parte de la solución que sugirió Larry K, registrar su propio protocolo podría ser una posible solución. La página web podría contener un enlace simple para descargar e instalar la aplicación, que luego registraría su propio protocolo en el registro de Windows.

La página web contendría entonces enlaces con parámetros que darían como resultado la apertura del progtwig registerd y el envío de cualquier parámetro especificado en el enlace. Hay una buena descripción de cómo hacer esto en MSDN

¿Probaste una acción de UNC ?

\\server\share\foo.exe

¿Estás diciendo que tienes problemas para insertar en una página web un enlace a un archivo que tiene una extensión .exe?

Si ese es el caso, retroceda un paso. Imagine que el archivo tiene una extensión .htm o una extensión .css. ¿Cómo puedes hacer que se descargue? Si se trata de un enlace estático, la respuesta es clara: el archivo debe estar en el docroot para la aplicación ASP.NET. IIS + ASP.NET ofrece muchos tipos de contenido: archivos .htm, archivos .css, archivos .js, archivos de imágenes, implícitamente . Todos estos archivos están en algún lugar debajo del docroot, que de forma predeterminada es c: \ inetpub \ wwwroot, pero para su aplicación web seguramente es algo diferente. El hecho de que el archivo que desea exponer tenga una extensión .exe no cambia las leyes básicas de la física de IIS. El exe tiene que vivir bajo el docroot. El recurso compartido de red podría funcionar para algunos navegadores.

La alternativa, por supuesto, es escribir dinámicamente el contenido del archivo directamente en Response.OutputStream. De esta manera, no necesita el .exe para estar en su docroot, pero no es un enlace de descarga directa. En este escenario, el archivo puede descargarse con un clic de botón.

Algo como esto:

  Response.Clear(); string FullPathFilename = "\\\\server\\share\\CorpApp1.exe"; string archiveName= System.IO.Path.GetFileName(FullPathFilename); Response.ContentType = "application/octet-stream"; Response.AddHeader("content-disposition", "filename=" + archiveName); Response.TransmitFile(FullPathFilename); Response.End(); 

si las aplicaciones son C #, puede usar la implementación de ClickOnce , que es una buena opción si no puede garantizar que el usuario tenga la aplicación, sin embargo, tendrá que volver a comstackr las aplicaciones con opciones de implementación y tomar un código repetitivo de cada proyecto

También puedes usar Javascript .

O puede registrar una aplicación para manejar un nuevo protocolo web que puede definir. También podría ser un protocolo de “selección de aplicación”, de modo que cada vez que se haga clic en una aplicación se vincularía a una página en su nuevo protocolo, todo el manejo de este protocolo pasará a su “aplicación de selección” que usa argumentos para encontrar y lanzar una aplicación en la PC del cliente.

HTH