2009-05-18 13 views
6

¿Cómo puedo ejecutar un archivo por lotes en el lado del cliente? Un archivo exe? ¿Solo para abrir el programa preinstalado en el lado del cliente?¿Cómo puedo ejecutar un programa o un archivo por lotes en el lado del cliente?

[Editar]

En cuanto ActiveX, he intentado

var activeXObj = new ActiveXObject("Shell.Application"); 
    activeXObj.ShellExecute("C:\\WINDOWS\\NOTEPAD.EXE", "", "", "open", "1"); 

pero esto no funciona. ¿Alguna sugerencia?

+4

Esto no es posible - javascript está específicamente diseñado para NO permitir esto, ya que sería un gran agujero de seguridad. Obligatorio o no, no puedes hacerlo. –

+0

Nunca diga nunca :) Un programa preinstalado podría instalar un control ActiveX que le permita iniciarse desde JavaScript. (Descargo de responsabilidad: esto sería repugnante e increíblemente alto mantenimiento, no estoy recomendando que realmente intente esto) – Andomar

+0

¿Quiere decir que en realidad le está pidiendo al SO un agujero en el navegador? A eso es a lo que se refiere esta pregunta. No estoy seguro de si importa si es su aplicación preinstalada o no. Hay algunas cosas con las que no deberíamos estar dispuestos a ayudar con SO. No creo que entiendas realmente que es lo que estás pidiendo. – cgp

Respuesta

33

De Javascript? No puedes. Es un riesgo de seguridad. Piénselo: ¿le gustaría que cada sitio web pudiera ejecutar programas en su PC?

+0

Sé que este es un riesgo de seguridad, pero este es un requisito urgente para ejecutar el programa preinstalado en el cliente y ser de Javascript? – Ahmed

+0

Puede tener un archivo de proceso por lotes para restaurar las asignaciones de unidad en un sitio de intranet, por ejemplo – Andomar

+0

Puede lograrlo con Microsoft ClickOnce (no confiable, requiere IE y una aplicación .NET) Un poco más de contexto por favor: ¿dónde está esto? ¿página web? ¿Cuál es la aplicación? – pjc50

10

¿Quiere decir iniciar un programa externo a través de una ventana del navegador usando JavaScript? ¡De ninguna manera puedes hacer eso! ¡Ese es un maldito agujero negro de seguridad!

5

Redirigir al cliente a http://yourserver/batchfile.bat. En algunos navegadores, esto pedirá al usuario que ejecute el archivo por lotes.

+0

http: //yourserver/batchfile.bat es del lado del servidor, el archivo que se ejecutará es del lado del cliente? – Ahmed

+0

Se descargaría el archivo por lotes a la PC y se ejecutaría allí, si el usuario selecciona "Ejecutar". – Andomar

+0

@Ahmed: lo que está proponiendo es que dirijas el navegador para descargar el archivo .bat y que el usuario lo ejecute. – belgariontheking

2

Si el problema es que el archivo por lotes se muestra en el navegador, debe establecer Content-Type y Content-Disposition en el encabezado HTTP, de modo que se solicita al usuario que guarde (o ejecute) el archivo en lugar de mostrarlo en el navegador.

No podrá ejecutar el archivo sin un OK del usuario, pero esto no debería ser un problema.

Have a look at this question for a little more detail.

0

Básicamente, no se puede. Si necesita lanzar algo en el lado del cliente, necesitará otro mecanismo completamente, presumiblemente uno con cierta seguridad integrada. Un cartel anterior mencionó psexec (http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx), que obviamente solo funcionará si tiene los permisos apropiados en el sistema de destino. y que está completamente fuera del navegador.

Básicamente, lo que estás pidiendo es un problema GRANDE, GRANDE, si pudieras hacerlo fácilmente.

Puede que busque en ActiveX, pero no sé qué límites hay en un objeto ActiveX en estos días (sé que HAY límites, pero quizás pueda trabajar dentro de ellos).

+0

Entonces ... ¿el JavaScript le pide al servidor que ejecute psexec para iniciar un programa en el cliente? Funcionaría, supongo. – Andomar

+0

Bueno, sí. Y nuevamente, esto solo funciona si el servidor se está ejecutando como un usuario que tiene los permisos apropiados en el cliente. –

5

Si realmente tiene control sobre el cliente, entonces es posible que desee instalar algún servicio de daemon remoto en el lado del cliente, como SSH.

PS. Sin embargo, invoca a través de su "código de servidor".

Actualizado:

No se desanime. Usted puede hacer eso de manera segura.

  1. Primero necesita un servicio daemon en el cliente que se encargará de la tarea de invocar su aplicación.Personalmente, prefiero construir un servidor rpc simple como servicio de Windows con C++ o Delphi; pero muchos otros tipos de servidor también podrían hacer el trabajo (SSH, Apache, Telnet)

  2. Luego haga una página web que permita al usuario "registrar" sus servicios con la autenticación adecuada para invocar ese servicio (contraseña, clave de seguridad)

  3. Cuando desee invocar su aplicación desde la página web en el cliente que ya está registrado, realice una llamada jaja (xmlhttprequest) a su servidor.

  4. El servidor debe validar la dirección IP solicitante con la información registrada.

  5. A continuación, realice una invocación de comando remoto al cliente con la información registrada.

Puede haber alguna situación de red que este esquema podría no funcionar. Sin embargo, si realmente tiene control sobre el entorno de ejecución, siempre habrá algunas soluciones.

+0

¿Pero cómo hacer esto desde la página web/javascript? – Ahmed

+0

Haz una llamada ajax a tu servidor. – Sake

+0

Esta sigue siendo una solución horrible, pero es tan divertida que es increíble. Y, en teoría, podría hacerse y ser "seguro", suponiendo que puede confiar en que el servidor tenga acceso SSH al cliente. Solo se aplicaría a una configuración de Intranet, y en realidad nunca sería una buena solución práctica, pero es increíble y sin complementos del navegador (por ejemplo, Flash, Silverlight, applets de Java). Requiere demasiada configuración para que los usuarios idiotas puedan usarla incluso para solicitarla. – bambams

6
<script language="javascript" type="text/javascript"> 

    function RunEXE(prog) { 
     var oShell = new ActiveXObject("WScript.Shell"); 
     oShell.Run('"' + prog + '"', 1); 
    }  
</script> 
+1

La solución anterior funciona solo en IE, el permiso de usuario requerido para ejecutar ActiveX, ¡¡pero FUNCIONA !! – yurin

Cuestiones relacionadas