none
Lamar un exe desde otro con permisos de administrador

    Pregunta

  • Hola ,me gustaria saber si es posible llamar un exe con permisos de administrador desde otro exe.

    Call Shell(Application.StartupPath + "\setup.exe", AppWinStyle.NormalFocus) 

    ¿como llamar a setup.exe con permisos de administrador? Gracias!!!

    sábado, 28 de enero de 2017 10:22

Respuestas

  • "Salvadj1" escribió:

    > buscaba algo parecido a esto pero en VB.net
    >
    > new Process { StartInfo = { FileName = Directory.GetCurrentDirectory() +
    >    @"\setup.exe", UseShellExecute = false, RedirectStandardOutput = true,
    >    RedirectStandardError = true, Verb = "runas" } }.Start();
    >
    > Me puedes ayudar?

    ¿Más quieres que te ayude? ¿No te basta con ejecutar simplemente la siguiente línea de código?

        ' Ejecutar el proceso con la cuenta Administrador
        RunAs(IO.Path.Combine(Directory.GetCurrentDirectory(), "setup.exe"), _
              "", "Administrador", "contraseña", "", False)

    Más fácil, imposible, aunque también te digo que más sencillo es decirle a un Administrador que ejecute directamente el programa setup.exe, que por medidas de seguridad, entiendo que es lo que deberías de hacer, de ésta manera no tendrías que preocuparte por suplantar la identidad de una cuenta perteneciente al grupo Administradores, y por tanto, de escribir una sola línea de código. ;-)

    Lo que ocurre es que para llamar a la función RunAs tienes que implementar en una Class o Module todas las funciones y estructuras de la API de Windows que aparecen en el ejemplo para suplantar o personificar (impersonate) los permisos de otro usuario perteneciente al grupo Administradores, y salvo que yo esté equivocado, eso se hace mediante el uso de la función CreateProcessWithLogonW.

    Pero una vez que tengas implementado todo el código en un Module o Class, lo puedes utilizas las veces que quieras con tan sólo realizar una llamada a la función RunAs (ejecutar como) tal cual te he indicado más arriba.

    Tienes que tener en cuenta que todas las funciones y procedimientos, sean o no de .NET o de cualquier otro marco de trabajo diferente, tienen una implementación interna que es transparente para el usuario, pero que hay que ejecutarla para que la operación finalice satisfactoriamente.

    Repito que tan sólo tienes que llamar a la función RunAs pasándole el ejecutable y las credenciales de una cuenta de usuario perteneciente al grupo Administradores, lo que quiere decir que tienes que conocer de antemano la contraseña de dicha cuenta de usuario.

    Lo mismo hay por ahí otra manera de suplantar a un Administrador sin necesidad de recurrir a la API de Windows, pero por ahora, yo al menos la desconozco. ;-)


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.




    domingo, 29 de enero de 2017 7:30
    Moderador

Todas las respuestas

  • "Salvadj1" preguntó:

    > me gustaria saber si es posible llamar un exe con permisos de administrador desde otro exe.
    >
    > ¿como llamar a setup.exe con permisos de administrador? Gracias!!!

    Hola:

    Siempre y cuando conozcas la contraseña de la cuenta del usuario Administrador, o de cualquier otro usuario que pertenezca al grupo Administradores, adapta a tus necesidades el ejemplo que aparece en la siguiente conversación:

    como abrir un archivo con shell con permisos de administrador

    > Call Shell(Application.StartupPath + "\setup.exe", AppWinStyle.NormalFocus)
    >

    Me imagino que estarás utilizando Visual Basic .NET. Si por casualidad estás aún desarrollando con Visual Basic 6.0, entonces consulta el siguiente artículo de la Base del Conocimiento de Microsoft, que fue el que utilicé para adaptar a Visual Basic .NET el ejemplo comentado anteriormente:

    How to start a process as another user from Visual Basic

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.

    sábado, 28 de enero de 2017 16:26
    Moderador
  • Gracias ,pero buscaba algo parecido a esto pero en VB.net

    new Process { StartInfo = { FileName = Directory.GetCurrentDirectory() + @"\setup.exe", UseShellExecute = false, RedirectStandardOutput = true, RedirectStandardError = true, Verb = "runas" } }.Start();
    

    Me puedes ayudar?


    • Editado Salvadj1 sábado, 28 de enero de 2017 20:44
    sábado, 28 de enero de 2017 20:44
  • "Salvadj1" escribió:

    > buscaba algo parecido a esto pero en VB.net
    >
    > new Process { StartInfo = { FileName = Directory.GetCurrentDirectory() +
    >    @"\setup.exe", UseShellExecute = false, RedirectStandardOutput = true,
    >    RedirectStandardError = true, Verb = "runas" } }.Start();
    >
    > Me puedes ayudar?

    ¿Más quieres que te ayude? ¿No te basta con ejecutar simplemente la siguiente línea de código?

        ' Ejecutar el proceso con la cuenta Administrador
        RunAs(IO.Path.Combine(Directory.GetCurrentDirectory(), "setup.exe"), _
              "", "Administrador", "contraseña", "", False)

    Más fácil, imposible, aunque también te digo que más sencillo es decirle a un Administrador que ejecute directamente el programa setup.exe, que por medidas de seguridad, entiendo que es lo que deberías de hacer, de ésta manera no tendrías que preocuparte por suplantar la identidad de una cuenta perteneciente al grupo Administradores, y por tanto, de escribir una sola línea de código. ;-)

    Lo que ocurre es que para llamar a la función RunAs tienes que implementar en una Class o Module todas las funciones y estructuras de la API de Windows que aparecen en el ejemplo para suplantar o personificar (impersonate) los permisos de otro usuario perteneciente al grupo Administradores, y salvo que yo esté equivocado, eso se hace mediante el uso de la función CreateProcessWithLogonW.

    Pero una vez que tengas implementado todo el código en un Module o Class, lo puedes utilizas las veces que quieras con tan sólo realizar una llamada a la función RunAs (ejecutar como) tal cual te he indicado más arriba.

    Tienes que tener en cuenta que todas las funciones y procedimientos, sean o no de .NET o de cualquier otro marco de trabajo diferente, tienen una implementación interna que es transparente para el usuario, pero que hay que ejecutarla para que la operación finalice satisfactoriamente.

    Repito que tan sólo tienes que llamar a la función RunAs pasándole el ejecutable y las credenciales de una cuenta de usuario perteneciente al grupo Administradores, lo que quiere decir que tienes que conocer de antemano la contraseña de dicha cuenta de usuario.

    Lo mismo hay por ahí otra manera de suplantar a un Administrador sin necesidad de recurrir a la API de Windows, pero por ahora, yo al menos la desconozco. ;-)


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.




    domingo, 29 de enero de 2017 7:30
    Moderador