ms-dos vb.net

Iniciado por NetJava, 15 Febrero 2012, 12:35 PM

0 Miembros y 2 Visitantes están viendo este tema.

NetJava

Buenas!!! Me estoy rallando un monton, y eso que hay bastante información.

Podríais aclararme como se pueden ejecutar comandos msdos desde .net, por ejemplo crear una carpeta¿?

Muchas gracias!!

kub0x

Hace poco programé mi propia línea de comandos en VB .NET, ya después codee una shell remota.

Bajo mi experiencia, conozco dos formas de hacer lo que pides, segun quieras capturar el output del código o sólo ejecutarlo.

Si sólo buscas ejecutar el código utiliza la función Shell, la cual ejecutará cualquier comando que desees.
Un breve ejemplo:

Código (VB.NET) [Seleccionar]

Dim Comando As String = "CMD /C netstat -ano"
Shell(Comando)
MsgBox("Comando Ejecutado")


Cabe decir que si quieres capturar el output de esta manera se haría de la siguiente forma:
CMD /C netstat -ano > C:\output.txt

PERO, hay otra forma más limpia, más profesional y no tan díficil de comprender, que ya es utilizando la clase Process de .NET
Te explico: en la clase Process hay propiedades para asignar el comando y los argumentos de éste para posteriormente ejecutarlos, ya sea en segundo plano sin mostrar la ventana al usuario o mostrándola. Además de esto, es muy cómodo utilizar esta clase para capturar el output o salida del comando, ya que no lo tiene que guardar en ningún sitio en texto plano.

Ejemplo:

Código (VB.NET) [Seleccionar]

Private Sub Ejecutar_Comando (Byval Comando As String, Byval Argumentos As String)
Dim p As New Process()
With p.StartInfo
                .UseShellExecute = False
                .WindowStyle = ProcessWindowStyle.Hidden
                .RedirectStandardOutput = True
                .RedirectStandardError = False
                .CreateNoWindow = True
                .FileName = Comando
                .Arguments = Argumentos
                .WorkingDirectory = "C:\WINDOWS\SYSTEM32\"
            End With
            p.Start()
End Sub


Échale imaginación y ganarás.

Un Saludo.
Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate


NetJava

Buenas, muchas gracias.

Lo del shell, perfecto. La de abajo me esta tocando la moral un poco. Como comando he probado de todas las posibilidades, con un ejemplo simple, como crear una carpeta de en C:\, en argumento por lo que he visto no es necesario introducir nada en este caso. Pues no me quiere crear la carpeta...

No se te pongo los comando que he probado:   (han sido tantas variantes)
CMD /C md hola
md hola
CMD md hola
.
.
.

NetJava

Buenas, de momento para ir avanzando me estoy con la primera forma.

Pero ya os hago el preguntote!!! Yo sigo intentandolo desde luego.

Como se podría ejecutar esto desde .net con shell:


cd\
cd Program Files
cd MySQL
cd MySQL Server 5.1
cd bin
MySQLInstanceConfig.exe -i -q "-lC:\mysql_install_log.txt"
"-nMySQL Server 5.1" "-pC:\Program Files\MySQL\MySQL Server
5.1" -v5.1.59 "-tC:\Program Files\MySQL\MySQL Server
5.0\my-template.ini" "-cC:\mytest.ini" ServerType=DEVELOPMENT
DatabaseType=MIXED ConnectionUsage=DSS Port=3306 ServiceName=db_portal
RootPassword=root


Muchas gracias!!

kub0x

#4
Cita de: NetJava en 15 Febrero 2012, 15:31 PM
Buenas, de momento para ir avanzando me estoy con la primera forma.

Pero ya os hago el preguntote!!! Yo sigo intentandolo desde luego.

Como se podría ejecutar esto desde .net con shell:

Vamos por partes, la respuesta a esta pregunta es sencilla :P

Se me ocurre que podrías crear un archivo .bat con el código que quieres automatizar y lllamarlo o ejecutarlo desde VB.NET con un simple:
Código (VB.NET) [Seleccionar]

Private Sub Ejecutar_Code(Byval ruta_fichero As String)
Shell(ruta_fichero)
End Sub


Donde ruta_fichero es la variable de tipo String que almacena en memoria la dirección del path o ruta donde se encuentra tu archivo .bat a ejecutar.
Con esto debería ejecutarse tu archivo.

Hay un truquillo que implementé en .NET y es el siguiente:

Cuando pasas el comando y el argumento como argumento al método que crea el proceso de ejecucción del comando se asignaran a las variables locales de dicho método lo que hayas pasado. Te aconsejo que separes dicho código de ejecucción del comando en dos partes:

Código (VB.NET) [Seleccionar]

Private Sub Ejecutar_Comando(Byval Comando As String, Byval Argumentos As String)
If Argumentos IsNot String.Empty 'si la variable argumentos no está vacia...
'Construyes el comando a ejecutar CON argumentos

Else

'Construyes el comando a ejecutar SIN argumentos

End If

¿Como saber si el comando que has introducido tiene argumentos? Bien, buscas los siguientes caracteres en el TextBox donde introduces el comando: "-" , "/" y los espacios (Chrw(32))

Espero que hayas entendido la explicación, cualquier duda ya sabes.

Saludos.
Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate