Ejecutar una aplicación, con otro usuario. “Another User”

Si eres ADMINISTRADOR de Sistemas, más de una vez te habrá pasado que estás en un ordenador y el usuario tiene los permisos limitados. Cuando pasa eso, y necesitamos abrir un configurador o ejecutar algún programa con permisos elevados, lo normal seria ejecutar el comando RUNAS en una consola de CMD “runas /noprofile /user:mymachine\administrator lusrmgr.msc” o bien, cerrar sesión y entrar con un usuario con permisos elevados….

Con la  aplicación que a continuación os presento, podrás ejecutar cualquier programa con el USUARIO que necesitemos; sea el usuario Local o del Dominio que pertenezca.

El funcionamiento es  muy sencillo y está pensado para ejecutar programas, que no necesiten el perfil del usuario cargado en el sistema /nopdrofile

/noprofile Especifica que el perfil de usuario no debe cargarse. Esto permite que las aplicaciones se carguen más rápidamente, pero puede ocasionar que algunas aplicaciones no se ejecuten correctamente.

Esto quiere decir, que si nosotros necesitamos abrir un WORD con otro usuario, éste no podrá cargar o generar la configuración de la personalización… produciendo que el programa,  no se ejecute correctamente….

Para poder personalizar los lanzamientos “Launch” en el programa “Another User”, nosotros podremos editar el archivo launch.txt para añadir los ejecutables que utilicemos, para la administración de nuestros sistemas informáticos..

# ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## 
# Añadir las aplicaciones, que utilicemos habitualmente.   ##
# ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## 

control
cmd
lusrmgr.msc
compmgmt.msc
services.msc
msconfig.msc

A si mismo, si nosotros queremos ejecutar un programa que no está en la lista, podemos arrastrar el ejecutable hasta la caja “Launch” y el programa “Another User” obtendrá la ruta del programa para su ejecución.


Estructura del programa.

Aquí podéis descargar la Aplicación

Aquí podéis descargar la Aplicación

Código fuente – Source Code

Public Class Start

    Private Sub Start_Load(ByVal sender As System.Object, ByVal e As EventArgs) Handles MyBase.Load
        ' Cargar  ComboBox Local o Dominio
        Dim computername As String = Environment.GetEnvironmentVariable("COMPUTERNAME")
        Dim dominio As String = Environment.GetEnvironmentVariable("USERDNSDOMAIN")
        ComboBox_Local_Dominio.Items.Add(computername)
        If Not (dominio = Nothing) Then ComboBox_Local_Dominio.Items.Add(dominio)

        If ComboBox_Local_Dominio.Items.Count > 0 Then
            ComboBox_Local_Dominio.SelectedIndex = 0
        End If

        ' Cargar Comobox programas
        If System.IO.File.Exists(Environment.CurrentDirectory & "\launch.txt") Then
            For Each Linea In System.IO.File.ReadAllLines(Environment.CurrentDirectory & ("\launch.txt"))
                If Not (Linea = Nothing) Then If Not (Linea.Contains("#")) Then ComboBox_Program.Items.Add(Linea)
            Next
        End If

        If ComboBox_Program.Items.Count > 0 Then
            ComboBox_Program.SelectedIndex = 0
        End If

    End Sub


    Private Sub ComboBox_Program_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles ComboBox_Program.DragDrop
        Dim files() As String = e.Data.GetData(DataFormats.FileDrop)
        For Each path In files
            ComboBox_Program.Items.Add(path)
            ComboBox_Program.Text = path
        Next
    End Sub


    Private Sub ComboBox_Program_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles ComboBox_Program.DragEnter
        If e.Data.GetDataPresent(DataFormats.FileDrop) Then
            e.Effect = DragDropEffects.Copy
        End If
    End Sub


    Private Sub TextBox_Contraseña_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox_Contraseña.KeyDown
        If e.KeyCode = Keys.Enter Then
            Button_Ejecutar_Click(sender, e)
        End If
    End Sub


    Private Sub Button_Ejecutar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_Ejecutar.Click
        If (TextBox_Contraseña.Text.ToString = "") Then
            MessageBox.Show("Instroduzca el usuario...", "Stop", MessageBoxButtons.OK, MessageBoxIcon.Stop)
            Exit Sub
        End If

        ' Contraseña
        Dim password As Security.SecureString = ConvertToSecureString(TextBox_Contraseña.Text)

        ' Particularidades del lanzamiento
        Dim programa As String
        Dim argumento As String
        If ComboBox_Program.Text.Contains(".msc") Then
            programa = "mmc.exe"
            argumento = ComboBox_Program.Text
        Else
            programa = ComboBox_Program.Text
            argumento = Nothing
        End If

        ' ProcessStartInfo 
        Try
            Dim Lanzamiento As New ProcessStartInfo With {
                .FileName = programa,
                .WorkingDirectory = "c:\Windows\System32\",
                .Arguments = argumento,
                .Domain = ComboBox_Local_Dominio.Text,
                .UserName = TextBox_Usuario.Text,
                .Password = password,
                .UseShellExecute = False
            }

            Process.Start(Lanzamiento)

        Catch ex As Exception
            MessageBox.Show(ex.ToString, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub


    Function ConvertToSecureString(ByVal str As String)
        Dim password As New Security.SecureString
        For Each enigma As Char In str.ToCharArray
            password.AppendChar(enigma)
        Next
        Return password
    End Function
End Class