Foros del Web » Programando para Internet » ASPX (.net) »

Ejecutar .bat o .exe (del servidor)

Estas en el tema de Ejecutar .bat o .exe (del servidor) en el foro de ASPX (.net) en Foros del Web. Saludos! Alguien sabe si es posible ejecutar un archivo desde un webform? (el archivo es del servidor y quiero que se ejecute en el servidor, ...
  #1 (permalink)  
Antiguo 12/05/2006, 05:45
 
Fecha de Ingreso: marzo-2004
Ubicación: Valencia
Mensajes: 367
Antigüedad: 20 años, 1 mes
Puntos: 1
Ejecutar .bat o .exe (del servidor)

Saludos!
Alguien sabe si es posible ejecutar un archivo desde un webform? (el archivo es del servidor y quiero que se ejecute en el servidor, claro)

Estoy probando con
Código:
System.Diagnostics.Process.Start(Server.MapPath("prueba.bat"));
pero no funciona; si el archivo no existe sí me da el error, pero si existe no hace nada de nada, no lo ejecuta, aunque tampoco me da ningún error.

Espero que alguien me pueda echar una mano. Saludos!
  #2 (permalink)  
Antiguo 12/05/2006, 05:51
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 3 meses
Puntos: 9
Hola Scho,
Acabo de ver en otro foro esto:
Código:
System.Diagnostics.Process.Start(@"c:\nes\nes.exe"); '-> Ejecuta el fichero nes.exe ubicado en la carpeta C:\nes
Creo que el tema está en la "@"

Y si no, también vi esto en la pagina del Guille:
Código:
' para detectar y manipular excepciones (errores del programa)
            'ProcessStartInfo se utiliza para iniciar procesos
            Dim abrirDoc As ProcessStartInfo = New ProcessStartInfo
            'Añadir a la ruta "\Visor de Imagen.html" para abrir el archivo
            abrirDoc.FileName = stRuta + "\Visor de imágenes.html"
            'Información al usuario de la ruta obtenida en su sistema
            MessageBox.Show("La ruta a tu archivo ""Visor de imágenes.html"" parece ser:" _
            + vbCrLf + vbCrLf + abrirDoc.FileName, "Archivo Visor de imágenes.html", _
            MessageBoxButtons.OK)
            'modo de apertura de archivo (también puede ser edit, print...)
            abrirDoc.Verb = "open"
            'abrir en ventana normal
            abrirDoc.WindowStyle = ProcessWindowStyle.Normal
            'Abrir el archivo mediante su programa asociado en Windows
            Process.Start(abrirDoc)
A ver si con esto puedes hacer algo. Cuando lo tengas comentalo!
Saludos.
__________________
..:: moNTeZIon ::..

Última edición por moNTeZIon; 12/05/2006 a las 05:56
  #3 (permalink)  
Antiguo 12/05/2006, 06:05
 
Fecha de Ingreso: marzo-2004
Ubicación: Valencia
Mensajes: 367
Antigüedad: 20 años, 1 mes
Puntos: 1
Saludos moNTeZIon!
Gracias por tu respuestas y además por hacerlo tan rápido.
He probado con la @ y el código que me has pasado pero no consigo nada, eso sí, errores no me da y parece que se ejecuta pero no hace nada.
Quizá me falte otorgar permisos o configurar algo del IIS?! no tengo ni idea, al archivo sí que le he dado permisos totales a todos los usuarios para probar, pero no hay forma de que me vaya, no lo entiendo.

Gracias y saludos.
  #4 (permalink)  
Antiguo 12/05/2006, 06:09
 
Fecha de Ingreso: marzo-2004
Ubicación: Valencia
Mensajes: 367
Antigüedad: 20 años, 1 mes
Puntos: 1
Por cierto que en formulario windows sí que me funciona, por lo menos lo de System.Diagnostics.Process.Start("c:\\prueba.bat") , pero en webforms nada.
  #5 (permalink)  
Antiguo 12/05/2006, 08:52
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 3 meses
Puntos: 9
Hola de nuevo Scho,
Parece ser que ASPNET (usuario bajo el que se ejecuta cualquier instruccion en el sistema, provinente de una aplicación ASP.NET) no tiene permisos para interactuar con el escritorio. Ahi van los pasos para darle permisos, en inglés
Código:
RESOLUTION
These are steps that needs to be followed,
 
1. Give permission for ASP.NET worker process account (<localmachine>\ASPNET) to interact with desktop or allow ASP.NET worker process to run in SYSTEM account.
 
             To know how to allow worker process to run in SYSTEM account and to know the default permissions of ASPNET account, check this article
              INFO: Process and Request Identity in ASP.NET (http://support.microsoft.com/default.aspx?scid=kb;en-us;317012)
 
2. Enable IIS Admin Service to interact with desktop
 
             To configure this, follow this steps.
 
             a. Open Control Panel and follow these steps: 
                           For Windows NT: click Services. 
                           For Windows 2000, Windows XP, and .NET Server: click Administrative Tools, and then click Services.

             b. Double-click IIS Admin Service. 

             c. On the Log On tab, select the Allow Service to Interact with Desktop check box.
                 Note: This article assumes that the IIS Admin Service runs as a local system.
 
             d. Stop and restart the IIS Admin Service.
Obtenido de http://support.microsoft.com/default...b;en-us;555134

Saludos
__________________
..:: moNTeZIon ::..
  #6 (permalink)  
Antiguo 12/05/2006, 11:24
Avatar de Alex Reyes  
Fecha de Ingreso: diciembre-2005
Ubicación: Camarillo, CA
Mensajes: 242
Antigüedad: 18 años, 4 meses
Puntos: 2
No recuerdo el código exacto, pero es algo como

dim x as Integer
x = Shell("C:\folder\program.exe")
__________________
Alex Reyes
http://jalexreyes.spaces.live.com
  #7 (permalink)  
Antiguo 15/05/2006, 02:39
 
Fecha de Ingreso: marzo-2004
Ubicación: Valencia
Mensajes: 367
Antigüedad: 20 años, 1 mes
Puntos: 1
Saludos!
Gracias a ambos por responder.

Alex Reyes, el código que me has pasado creo que sólo sirve para VB.NET, yo lo necesitaría para C#, de todas formas lo he probado en una aplicación web en VB y me pasa lo mismo que con System.Diagnostics.Process.Start.

moNTeZIon, gracias de nuevo, he leído el artículo y tal como dice he marcado lo de "Permitir que el servicio interactúe con el escritorio", pero es que no hay forma, no sé lo que pasa :(. Tal como pone en el artículo cuando ejecuto notepad, por ejemplo, se queda como en segundo plano y, aunque no se abre, se puede ver desde el administrador de tareas pero parece que realmente no hace nada porque cuando ejecuto un .bat que sí debería hacer algo no lo hace.... ... Esto es bastante frustrante, no sé que puede pasar.

Un saludo!
  #8 (permalink)  
Antiguo 15/05/2006, 03:37
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 3 meses
Puntos: 9
Disculpas. Vi que el artículo era para la version 1.0
Código:
APPLIES TO
• Microsoft ASP.NET 1.0
Que es lo que haces con ese fichero bat? No te sirve aunque se ejecute en segundo plano?
__________________
..:: moNTeZIon ::..
  #9 (permalink)  
Antiguo 15/05/2006, 03:57
 
Fecha de Ingreso: marzo-2004
Ubicación: Valencia
Mensajes: 367
Antigüedad: 20 años, 1 mes
Puntos: 1
En el .bat estoy probando esto:
echo prueba >> c:\prueba.txt

Más que nada es para ver si se ejecuta pero parece que no lo hace, no llega a escribir nada en prueba.txt.
He comprobado que el bat está bien porque si lo ejecuto normalmente sí que escribe.

Un saludo
  #10 (permalink)  
Antiguo 15/05/2006, 13:27
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 19 años, 4 meses
Puntos: 7
Me imagino que le diste permisos de escritura al usuario con que se ejecuta asp.net sobre el recurso "c:" no?

Saludos
__________________
Alex Concha
Buayacorp - Programación y Diseño
  #11 (permalink)  
Antiguo 15/05/2006, 13:57
 
Fecha de Ingreso: marzo-2004
Ubicación: Valencia
Mensajes: 367
Antigüedad: 20 años, 1 mes
Puntos: 1
Sí, uso autenticación windows y entro como administrador, de todas formas he probado a meterlo en el directorio de la aplicación y de paso darte permisos totales a todos los usuarios (es que ya no sabía que hacer) y todo sin resultado.

Por cierto que me he estado fijando en que cuando, por ejemplo, ejecuto
System.Diagnostics.Process.Start("notepad");
como os había dicho el notepad, aunque no se ve, aparece en el administrador de tareas como ejecutándose, pero el usuario "propietario" de ese proceso no es el usuario con el que me autentifico en la aplicación si no el usuario "Proceso de red", lo digo por si el problema puede venir por ahí... no sé, es que pensaba que ejecutar un .exe sería algo "normal" y sencillo y que no habría problemas y ya llevo varios días sin resultado.

Un saludo
  #12 (permalink)  
Antiguo 18/05/2006, 07:02
 
Fecha de Ingreso: marzo-2004
Ubicación: Valencia
Mensajes: 367
Antigüedad: 20 años, 1 mes
Puntos: 1
Sigo sin conseguirlo, alguna idea? nadie ha ejecutado nunca un .exe desde la página web? se tiene que poder hacer... supongo.

Saludos
  #13 (permalink)  
Antiguo 07/06/2006, 03:57
Avatar de nsmsndie  
Fecha de Ingreso: julio-2005
Mensajes: 61
Antigüedad: 18 años, 9 meses
Puntos: 0
Has probado con esto, lo he encontrado en otro post de este foro:

Cita:
por fin encontre el problema para windows 2003 lo que debemos hacer es darle permisos al ejecutable cmd.exe que esta en c:/windows/system32 el permiso debe ser de todos con las opciones de lectura y ejecucion.
despues verificamos que la carpeta donde tenemos nuestro .bat que para mi caso era c:/cartera tenga permisos para el usuario anonimo de ISS.
Lo explica para un bat, pero digo yo que el exe será igual... es lo único que se me ocurre. Yo voy a probarlo, ya te comento pues estoy buscando también poder ejecutar un exe.
  #14 (permalink)  
Antiguo 07/06/2006, 07:45
 
Fecha de Ingreso: octubre-2004
Mensajes: 71
Antigüedad: 19 años, 6 meses
Puntos: 0
agreda esto al principio del codigo

Imports System.Diagnostics

y donde quieres ejecutar el bat coloca este codigo es VB pero debe ser parecido a C#

Try
Process.Start("C:\cartera\cartger.bat")
Catch exp As Exception
Response.Write("<script language='javascript'>alert('" & exp.Message & "');</script>")
End Try

ojo con los permisos busca mi pregunta que esta mas abajo que lo explico.
  #15 (permalink)  
Antiguo 07/06/2006, 08:48
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 3 meses
Puntos: 9
Cita:
Iniciado por Scho
Por cierto que me he estado fijando en que cuando, por ejemplo, ejecuto
System.Diagnostics.Process.Start("notepad");
como os había dicho el notepad, aunque no se ve, aparece en el administrador de tareas como ejecutándose, pero el usuario "propietario" de ese proceso no es el usuario con el que me autentifico en la aplicación si no el usuario "Proceso de red", lo digo por si el problema puede venir por ahí... no sé, es que pensaba que ejecutar un .exe sería algo "normal" y sencillo y que no habría problemas y ya llevo varios días sin resultado.
Scho, date cuenta que una cosa es que un usuario se logue en tu aplicación, para poder utilizar unos recursos de ésta, y no poder utilizar otros, según sus permisos. Pero otra cosa es bajo qué usuario se ejecutan las acciones de una aplicación web asp.net en el servidor.
Existe un usuaroi que es ASP.NET , a parte que ya conocerás el usuario invitado bajo el que se ejecutan las aplicaciones web (IUSR_NombreMaquina).
Intenta jugar con estos dos usuarios y dales permisos a esas carpetas.
Nada tiene que ver con el usuario que se logue en la aplicación.

También parece interesante lo que comenta nsmsndie. Pero no se...

Saudos Scho.
__________________
..:: moNTeZIon ::..
  #16 (permalink)  
Antiguo 08/06/2006, 05:08
Avatar de nsmsndie  
Fecha de Ingreso: julio-2005
Mensajes: 61
Antigüedad: 18 años, 9 meses
Puntos: 0
Creo que encontré la solución, pero por ahora solo me va en mi ordenador en el servidor, se queda como colgado.

Primero quita los permisos que dije de cmd.exe (eso de cambiar los permisos a archivos dentro de system32, no mola nada...)

Te escribo el código que he puesto para que me funcione.

Código:
public string EjecutarArchivo(string fichero)
    {
        try
        {
            ProcessStartInfo psi = new ProcessStartInfo(fichero);
            psi.WorkingDirectory = "C:\tmp";
            psi.WindowStyle = ProcessWindowStyle.Minimized;
            Process.Start(psi);

            return fichero;
        }
        catch (Exception e)
        {
            return e.ToString();
        }
    }
Así si que me funciona, pero... como explicais más arriba, se queda como en segundo plano en el admin. de tareas :)
  #17 (permalink)  
Antiguo 09/06/2006, 13:44
 
Fecha de Ingreso: marzo-2004
Ubicación: Valencia
Mensajes: 367
Antigüedad: 20 años, 1 mes
Puntos: 1
Saludos, he estado un poco "perdido" estos días y no he podido entrar, siento no haber podido responderos.

Muchas gracias a las 2 por responder. Comentaos que finalmente el problema, como bien decía moNTeZIon, era de permisos, lo único que he podido hacer es cambiar el usuario con el que se ejecuta esa aplicación..... no me gusta nada el método, me parece MUY inseguro pero no he conseguido hacerlo de otro modo :(

nsmsndie, la forma que me comentas es la que he estado probando pero no funciona, aunque parece que se queda ejecutando en segundo plano realmente no lo hace. Probé a generar un .exe que me creaba un fichero e intenté ejecutarlo con eso desde web, pero no creaba nada.


Muchas gracias y un saludo.
  #18 (permalink)  
Antiguo 12/06/2006, 02:07
Avatar de nsmsndie  
Fecha de Ingreso: julio-2005
Mensajes: 61
Antigüedad: 18 años, 9 meses
Puntos: 0
Ok, entonces puedes explicarme exactamente que has hecho, es decir que permisos has dado y a que archivo... te lo digo porque yo tengo el mismo problema.

Gracias.
  #19 (permalink)  
Antiguo 13/06/2006, 10:12
 
Fecha de Ingreso: marzo-2004
Ubicación: Valencia
Mensajes: 367
Antigüedad: 20 años, 1 mes
Puntos: 1
Bueno, pues te explico, pero te diré que no me parece una forma nada óptima ni segura, pero por ahora es lo único que me ha funcionado. Te lo pongo para Win 2003 Server, para XP u otro S.O. no puedo decirte si será la mismo.

1 - Te creas un usuario normal (en el active directory, en el administrador de equipos,...) y le agregas al grupo IIS_WPG (al menos así se llama en Win 2003 server, si no usas ese S.O. quizá en otro se llame distinto pero será parecido)
2 - En el IIS creas un nuevo "Grupo de Aplicaciones" y en la pestaña "Identidad" le asignas el usuario que has creado antes.
3 - Se cambia el "Grupo de Aplicaciones" de la carpeta virtual de tu aplicación al nuevo que se ha creado.

Luego ya es cuestión de poner el código que me habías posteado, lo de "ProcessStartInfo psi..."

Bueno, en resumen, la idea es que la aplicación se ejecute con un usuario "nomal", con más permisos sobre el ordenador que el usuario que se usa por defecto. Yo lo utilizo en una intranet, así que la seguridad no es tan importante, pero si fuera por Internet no sé yo si me fiaría, eso ya depende de ti.

Un saludo.
  #20 (permalink)  
Antiguo 06/07/2006, 13:05
Avatar de Skyeslc  
Fecha de Ingreso: julio-2006
Mensajes: 2
Antigüedad: 17 años, 9 meses
Puntos: 0
problemas para ejecutar el archivo .bat desde asp.net c#

He estado leyendo de su caso en este foro y yo tengo el mismo lei y probe con lo que ustedes tienen acá pero el .bat no se me ejecuta sin embrago lo ejecuto desde c: y lo hace pero cuando es de c# no hace nada...







Cita:
Iniciado por nsmsndie
Creo que encontré la solución
, pero por ahora solo me va en mi ordenador en el servidor, se queda como colgado.

Primero quita los permisos que dije de cmd.exe (eso de cambiar los permisos a archivos dentro de system32, no mola nada...)

Te escribo el código que he puesto para que me funcione.

Código:
public string EjecutarArchivo(string fichero)
    {
        try
        {
            ProcessStartInfo psi = new ProcessStartInfo(fichero);
            psi.WorkingDirectory = "C:\tmp";
            psi.WindowStyle = ProcessWindowStyle.Minimized;
            Process.Start(psi);

            return fichero;
        }
        catch (Exception e)
        {
            return e.ToString();
        }
    }
Así si que me funciona, pero... como explicais más arriba, se queda como en segundo plano en el admin. de tareas :)
  #21 (permalink)  
Antiguo 06/07/2006, 13:10
Avatar de Skyeslc  
Fecha de Ingreso: julio-2006
Mensajes: 2
Antigüedad: 17 años, 9 meses
Puntos: 0
Hola tuve el mismo problema hoy y no encuentro como ejecutar el bat desde C# sabras ayudarme?????
Además lo prbe en windows aplicattion y si funciona pero lo necesito para webform y no se que hacer lei algo de timeout de la página y que por ello se corta el proceso sin terminar y hay que colocarle algo adicional pero no tengo idea

Última edición por Skyeslc; 06/07/2006 a las 15:31
  #22 (permalink)  
Antiguo 06/11/2006, 11:54
Avatar de affv  
Fecha de Ingreso: diciembre-2002
Ubicación: Ahora aqui
Mensajes: 485
Antigüedad: 21 años, 4 meses
Puntos: 0
creo que con Shell("C:\Programa.bat") te deberia de funcionar.
__________________
Todo tiene un comienzo y un fin!!
Postea tus proyectos
  #23 (permalink)  
Antiguo 29/06/2009, 01:30
 
Fecha de Ingreso: junio-2007
Mensajes: 24
Antigüedad: 16 años, 10 meses
Puntos: 0
Respuesta: Ejecutar .bat o .exe (del servidor)

Hola, yo tengo el mismo problema, mi .bat lo que hace es lanzar una inserción en Oracle con SQLLoader, cuando ejecuto manualmente el .bat me lo hace perfectamente pero cuando lo hago por código se abre la consola pero no escribe nada y el proceso aparece en el administrador y como propietario esta mi usuario de windows, he intentado hacer los pasos que habeis dicho pero no he encontrado lo de "Grupo de aplicaciones", estoy en Windows XP y mi ISS es la versión 5.1. Gracias por la ayuda, un saludo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:03.