Set wshShell = WScript.CreateObject ("WSCript.shell")
wshshell.run "runas ..."

¿Cómo puedo obtener los resultados y la pantalla en un MsgBox

  • Definir los «resultados». Runas código de salida? El código de salida de la ejecución de la aplicación a través de runas? La aplicación de la salida de la consola?
InformationsquelleAutor Cocoa Dev | 2011-05-19

3 Comentarios

  1. 20

    Usted desea utilizar el WshShell objeto del método de ejecución lugar de la Ejecución. Luego simplemente leer la línea de comandos de la salida de los flujos estándar. Pruebe el siguiente:

    Const WshFinished = 1
    Const WshFailed = 2
    strCommand = "ping.exe 127.0.0.1"
    
    Set WshShell = CreateObject("WScript.Shell")
    Set WshShellExec = WshShell.Exec(strCommand)
    
    Select Case WshShellExec.Status
       Case WshFinished
           strOutput = WshShellExec.StdOut.ReadAll
       Case WshFailed
           strOutput = WshShellExec.StdErr.ReadAll
    End Select
    
    WScript.StdOut.Write strOutput  'write results to the command line
    WScript.Echo strOutput          'write results to default output
    MsgBox strOutput                'write results in a message box
    • Hemos de ser capaces de hacer el mismo tipo de cosa con WshShell.Ejecutar?
    • No. Ejecutar no proporciona acceso a los flujos estándar.
    • Nota: Este es asincrónica así que es probable que vea una incorrecta WshShellExec.Status en Select Case
    • Si se utiliza como se pretende, para ejecutar programas de línea de comandos, ejecute el comando y devuelve un objeto al finalizar el curso. Sin embargo, si se inicia una aplicación de ventanas tales como calc.exe necesitará un bucle desde la línea de comandos sería volver antes de la ejecución del programa terminó. En ese caso, simplemente bucle hasta que WshShellExec.Status <> 0.
    • falla utilizando su propio strCommand valor. Devuelve 0 (que significa Correr) Fija en stackoverflow.com/questions/32920690/…
    • Por favor, ver mi comentario anterior.
    • Tuve el mismo problema cuando se ejecuta nada. Como rdev5 dijo, Exec es asincrónico, por lo que WshShellExec.Status todavía es 0 (en ejecución) en el primer momento en el que la revise. Usted necesita bucle hasta que se hace con algo como While WshShellExec.Status = 0 : WScript.Sleep 50 : Wend tal vez considere la posibilidad de editar su respuesta.

  2. 0

    Esta es una versión modificada de Nilpo la respuesta que corrige el problema con WshShell.Exec ser asincrónico. Hacemos un largo bucle de espera hasta que la cáscara del estado ya no se está ejecutando y, a continuación, comprobamos el resultado. Cambiar el argumento de línea de comandos -n 1 a un valor más alto para hacer ping tomar más tiempo, y ver que el guión va a esperar más tiempo hasta su finalización.

    (Si alguien tiene un verdadero asincrónica, un evento basado en la solución del problema, por favor hágamelo saber!)

    Option Explicit
    
    Const WshRunning = 0
    Const WshFinished = 1
    Const WshFailed = 2
    
    Dim shell : Set shell = CreateObject("WScript.Shell")
    Dim exec : Set exec = shell.Exec("ping.exe 127.0.0.1 -n 1 -w 500")
    
    While exec.Status = WshRunning
        WScript.Sleep 50
    Wend
    
    Dim output
    
    If exec.Status = WshFailed Then
        output = exec.StdErr.ReadAll
    Else
        output = exec.StdOut.ReadAll
    End If
    
    WScript.Echo output
  3. -2
    var errorlevel = new ActiveXObject('WScript.Shell').Run(command, 0, true)

    el tercer parámetro debe ser verdadera, y errorlevel será el valor de retorno, comprobar si es igual a 0.

    • No VBScript; no (std) out (put).
    • I código de prueba en jscript, y creo vbscript está bien también
    • como se puede ver en la otra respuesta, tu suposición es incorrecta.
    • no, si el tercer parámetro es true, el valor de retorno será errorlevel

Dejar respuesta

Please enter your comment!
Please enter your name here