locked
Ejecutar un fichero .bat desde una aplicacion asp.net vb RRS feed

  • Pregunta

  • Hola a todos, estoy intentando ejecutar un fichero .bat que contiene una sola linea, el correspondiente fichero.exe mas sus argumentos. La aplicacion corre bajo Windows 2008 Server y si accedo por escritorio remoto no tengo problema en ejecutar correctamente el fichero .bat.

    El problema viene cuando lo intento hacer desde dentro de una aplicacion de prueba que he hecho al efecto. He usado process.start pero no hay forma que lo haga, he mirado por Internet y he probado muchas formas de hacerlo pero el proceso se termina sin mas, no hace nada.

    Creo que puede ser un tema de permisos, que al ejecutar el .bat pues no lo haga por falta de permisos. Espero que alguien me pueda ayudar, si necesitais alguna informacion adicional no dudeis en decirmelo.

    Muchas gracias.


    Balta

    lunes, 13 de febrero de 2012 19:01

Respuestas

Todas las respuestas

  • Hola,

    Pero el archivo bat que estas tratando de correr en donde se encuentra. En el server o en el cliente? Desde el cliente no vas a poder.

    Puedes darle una mirada a la informacion del siguiente enlace y ver si te funciona la tecnica expuesta acá

    Run a .bat asp.net

    Saludos,



    Jason Ulloa
    Mi Blog San José, Costa Rica

    lunes, 13 de febrero de 2012 19:44
  • Gracias Jason por su respuesta.

    El fichero .bat esta en el servidor, lo que hace ese fichero es generar un fichero .mp3 desde un .txt a traves de una aplicacion que lee el texto del .txt

    He seguido el ejemplo que me ha dicho y sigue sin hacer nada pero he podido capturar lo que aparece por consola, aqui se lo dejo por si se le ocurre como solucionarlo:

    Microsoft Windows [Versi¢n 6.1.7601]
    Copyright (c) 2009 Microsoft Corporation. Reservados todos los derechos.
    
    c:\windows\system32\inetsrv>E:\TACommand\TACommand /fromfile=F:\voces\prueba.txt /tofile=F:\voces\prueba.mp3 /voice="ScanSoft Monica22 (Spanish)"
    Access violation at address 004642F9 in module 'TACommand.exe'. Read of address FFFFFFFE
    
    c:\windows\system32\inetsrv># F:\voces\prueba.bat run successfully. Exiting
    
    c:\windows\system32\inetsrv>EXIT

    Gracias de nuevo


    Balta

    lunes, 13 de febrero de 2012 20:24
  • Al inicio comentaste que se lo hacias con escritorio remoto funcionaba, la pregunta es si cuando lo haces de esa manera lo ejecutas como administrador o en forma simple.

    Saludos,



    Jason Ulloa
    Mi Blog San José, Costa Rica

    lunes, 13 de febrero de 2012 21:48
  • Si, cuando accedo al servidor por escritorio remoto lo hago como administrador, y funciona perfectamente.

    Me imagino que la solucion puede ser ejecutar el bat como administrador desde la aplicacion asp.net pero no se como hacerlo. Este es el codigo que he usado:

    ' Get the full file path
            Dim strFilePath As String = "F:\voces\prueba.bat"
    
    
            ' Create the ProcessInfo object
            Dim psi As System.Diagnostics.ProcessStartInfo = New System.Diagnostics.ProcessStartInfo("cmd.exe")
            psi.UseShellExecute = False
            psi.RedirectStandardOutput = True
            psi.RedirectStandardInput = True
            psi.RedirectStandardError = True
            'psi.WorkingDirectory = "F:\voces\"
    
    
            ' Start the process
            Dim proc As System.Diagnostics.Process = System.Diagnostics.Process.Start(psi)
    
    
    
            ' Open the batch file for reading
            Dim strm As System.IO.StreamReader = System.IO.File.OpenText(strFilePath)
    
    
            ' Attach the output for reading
            Dim sOut As System.IO.StreamReader = proc.StandardOutput
    
    
            ' Attach the in for writing
            Dim sIn As System.IO.StreamWriter = proc.StandardInput
    
    
    
            ' Write each line of the batch file to standard input
            While (strm.Peek() <> -1)
    
                sIn.WriteLine(strm.ReadLine())
            End While
    
    
            strm.Close()
    
    
            ' Exit CMD.EXE
            Dim stEchoFmt As String = "# {0} run successfully. Exiting"
    
    
            sIn.WriteLine(String.Format(stEchoFmt, strFilePath))
            sIn.WriteLine("EXIT")
    
    
            'Close the process
            proc.Close()
    
    
            ' Read the sOut to a string.
            Dim results As String = sOut.ReadToEnd().Trim()
    
    
    
            ' Close the io Streams;
            sIn.Close()
            sOut.Close()
    


    Balta


    • Editado baltasarb lunes, 13 de febrero de 2012 21:53
    lunes, 13 de febrero de 2012 21:51
  • hola

    recuerda que una aplciacion web corre impersonando un usuario diferentes, puede que este no tengs permisos de ejecucion para el proceso que quieres realizar

    deberias validar que usuario defines en el application pool imagen

    valida que tenga un usuario que si pueda ejecutar esta aplicacion

    tambien podrias impersonando

    ASP.NET Impersonation

    Cómo implementar la representación en una aplicación ASP.NET

    Understanding Impersonation in ASP.NET

    defines en el web.config el tag identity donde pones un usuario y password que pueda eejcutar la aplicacion

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    martes, 14 de febrero de 2012 1:04
  • Gracias a su post he conseguido ejecutar sin problemas un fichero .bat, por ejemplo con la compresion por winrar de una carpeta. Pero resulta que el ejecutable en concreto que necesito para mi trabajo sigue sin funcionar... lo hace bajo escriotorio remoto pero desde la aplicacion asp.net no lo hace...


    Balta

    martes, 14 de febrero de 2012 10:09