Este es mi código intentar ejecutar cmd.exe con admin priviligies. Sin embargo, puedo obtener la solicitud de la operación requiere de la elevación. si me quedo cmd.exe con «Ejecutar como Administrador» a través de mi windows, funciona, sin embargo, a través de vb, no. Este es mi código.

Try
        Dim process As New Process()
        process.StartInfo.FileName = "cmd.exe "
        process.StartInfo.Verb = "runas"
        process.StartInfo.UseShellExecute = False
        process.StartInfo.RedirectStandardInput = True
        process.StartInfo.RedirectStandardOutput = True
        process.StartInfo.RedirectStandardError = True
        process.StartInfo.CreateNoWindow = True

        process.Start()
        process.StandardInput.WriteLine("route add 8.31.99.141 mask 255.255.255.255 " & cmdorder)
        process.StandardInput.WriteLine("exit")
        Dim input As String = process.StandardOutput.ReadToEnd
        process.Close()
        Dim regex As Regex = New Regex("(ok)+", RegexOptions.IgnoreCase) ' wa requested
        ' txtLog.AppendText(input)
        Return regex.IsMatch(input)

Gracias.

runas param hace este proceso para pedir el permiso de escalada de privilegios. Es totalmente correcto comportamiento. Trate de usar psexec de herramientas administrativas.

OriginalEl autor user2550788 | 2013-07-24

2 Comentarios

  1. 11

    Usted no puede lograr lo que desea.

    Que puede uso Process.Start() para el lanzamiento de un elevado proceso, pero sólo si UseShellExecute = true:

    Dim process As New Process()
    process.StartInfo.FileName = "cmd.exe "
    process.StartInfo.Verb = "runas"
    process.StartInfo.UseShellExecute = True
    process.Start()

    La razón es porque debe uso ShellExecute si desea iniciar una elevada proceso. Sólo ShellExecute sabe cómo elevar.

    Si especifica UseShellExecute = False, entonces CreateProcess se utiliza en lugar de ShellExecute. CreateProcess no sabe cómo elevar. Por qué? Desde el AppCompat chico:

    Bien, CreateProcess es muy bajo en las capas. ¿Qué se puede hacer sin la capacidad de crear un proceso? No un montón. Elevación, sin embargo, es una historia diferente. Se requiere un viaje a la aplicación de la elevación de servicio. Este, a continuación, llama a consent.exe que tiene que saber cómo leer la directiva de grupo y, si es necesario, cambiar al escritorio seguro y abre una ventana y pedir permiso al usuario /credenciales, etc. Ni siquiera tenemos que tomar todas estas características, vamos a tomar el cuadro de diálogo.

    Ahora, para la creación de un proceso que requiere elevación, normalmente, sólo el interruptor de seguridad de Api. El shell se encuentra en una capa superior, y en consecuencia es capaz de tomar una dependencia de la elevación. Así, usted acaba de cambiar su llamada a CreateProcess con una llamada a ShellExecute.

    Para que se explica cómo se puede elevar cmd, pero una vez que lo hagas: no está permitido para redirigir la salida, u ocultar la ventana; como sólo CreateProcess puede hacer que:

    Reorientación de e/S y la ocultación de la ventana sólo puede funcionar si el proceso es iniciado por CreateProcess().

    Que fue un largo camino de decir que este chico le preguntó el la misma pregunta por aquí; pero sin la indignidad de tener a alguien cerca de tu pregunta.

    Nota: Cualquier código es de dominio público. No atribución requerida.

    process.StartInfo.RedirectStandardOutput = True es necesaria para leer la salida. Pero parece que no se puede establecer con UseShellExecute. Favor de proporcionar la solución si los hubiere.

    OriginalEl autor Ian Boyd

  2. 0

    Lo hacen como un objeto y, a continuación, empezar por exigir admin priv en la aplicación.objeto.configuración de la cosa.

    OriginalEl autor Mrk Hawes

Dejar respuesta

Please enter your comment!
Please enter your name here