2011-08-26 28 views
9

Tengo un programa (lo he creado) y quiero iniciarlo en el servidor cuando se carga la página web.Ejecutar un programa desde ASP.NET C#

Aquí está el código que tengo

public partial class _Default : System.Web.UI.Page 
{ 
    Process app = new Process(); 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     app.StartInfo.FileName = @"D:/Path to /My/Program to be run.exe"; 
     app.Start(); 
    } 
} 

En este momento la aplicación es 'correr' sin embargo se bloquea al instante. Si solo ejecuto la aplicación (haciendo doble clic en el archivo ejecutable) se ejecuta y todo está bien.

¿alguien ve si me falta algo aquí?

+0

¿Hay algún tipo de mensaje de error cuando se bloquea? –

+0

Por cierto, ¿por qué hacer pública la "aplicación"? –

+0

"_ {nombre de la aplicación} _ ha dejado de funcionar. Windows está buscando una solución al problema" – rlemon

Respuesta

10

Puede usar ProcessStartInfo.

ProcessStartInfo psi = new ProcessStartInfo(); 
psi.FileName = @"D:/Path to /My/Program to be run.exe"; 
psi.WorkingDirectory = IO.Path.GetDirectoryName(psi.FileName); 
Diagnostics.Process.Start(psi); 
+0

Él ya lo hizo, esa es su línea 'app.StartInfo.FileName = @" ... ";'. – qJake

+0

Duuuur, lo siento. Jaja. – Smur

+2

¡Funcionó! Esto funciona. Sin embargo, ¿por qué tiene que invocarse de esta manera?cuál es la diferencia real (solo que estoy aprendiendo algo y no solo copie y pegue su respuesta) – rlemon

0

Depende de lo que intentes ejecutar. Tal vez cuando lo ejecutas desde tu aplicación C#, falta algo. También es posible que no tenga los permisos correctos para ejecutar la aplicación desde C#. Eso es todo lo que puedo decir sin saber qué se está intentando ejecutar.

+0

La aplicación que intento ejecutar tiene muy pocas dependencias. Es una pequeña aplicación HMI que escribí para leer los valores de un dispositivo en serie y mostrarlos en un formulario. Ahora quiero abrir la aplicación desde la página web aC#/ASP.NET, leer los valores del dispositivo en serie conectado al servidor, almacenar los datos en un db o en un archivo plano y permitir que el usuario lo muestre ahora o en un fecha posterior. – rlemon

+0

Para eso, le recomiendo usar un servicio de Windows para iniciar el programa: de esta manera la HMI puede almacenar los datos en la base de datos y más tarde, en cualquier aplicación, puede mostrar los datos ordenados por fecha de inserción o algo así. –

-1

has necesitado algo como esto en Javascript: -

var shell = new ActiveXObject("Shell.Application"); 
var appExe = @"D:/Path to /My/Program to be run.exe"; 
shell.ShellExecute(appExe , "", "", "open", "1"); 
3

Suena como la aplicación que está tratando de correr tiene una interfaz de usuario. Si su intención es ejecutar esto en el servidor utilizando la cuenta del grupo de aplicaciones ASP.NET, tendrá menos problemas si diseña la aplicación como una aplicación de consola y protege el acceso a recursos externos, como su panel de operador, con excepciones registradas.

+0

Con el tiempo, convertiré la aplicación en una aplicación de consola. Soy completamente nuevo en ASP.NET y cómo interactúa con su código subyacente. Actualmente estoy inmerso en algunos libros de ASP.NET, aprendiendo despacio. – rlemon

3

Este es un problema de seguridad. Ejecutar cualquier exe desde fuera de la carpeta bin representa una amenaza a la seguridad. Tienes que copiar el exe que intentas ejecutar en la carpeta bin.

+0

¿Puede otorgar acceso a una carpeta fuera de las aplicaciones .NET? –

Cuestiones relacionadas