elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  COMANDOS MULTIPLES - VB
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: COMANDOS MULTIPLES - VB  (Leído 8,642 veces)
rochro

Desconectado Desconectado

Mensajes: 42


Ver Perfil
Re: COMANDOS MULTIPLES - VB
« Respuesta #10 en: 18 Junio 2014, 16:27 pm »

No estoy seguro pero creo que tu problema puede estar en:

Código
  1. Invoke(Finished)


Benjo, hice lo que me dijiste y sigue igual.


En línea

El Benjo


Desconectado Desconectado

Mensajes: 392



Ver Perfil WWW
Re: COMANDOS MULTIPLES - VB
« Respuesta #11 en: 18 Junio 2014, 20:25 pm »

Estás seguro de que no se ejecuta "runpkr00.exe -d " & nombre por cada archivo? O sólo no te muestra la información en la pantalla?

Para qué es la línea "Invoke(Finished)"?

Has colocado puntos de interrupción en el bucle para comprobar que realmente hace cada iteración que debería?

Si la respuesta a la pregunta anterior es "sí", ¿se ejecuta cada iteración sin problemas o da algún error?


En línea

www.es.neftis-ai.com

Sí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.
rochro

Desconectado Desconectado

Mensajes: 42


Ver Perfil
Re: COMANDOS MULTIPLES - VB
« Respuesta #12 en: 18 Junio 2014, 20:38 pm »

Estás seguro de que no se ejecuta "runpkr00.exe -d " & nombre por cada archivo? O sólo no te muestra la información en la pantalla?

Para qué es la línea "Invoke(Finished)"?

Has colocado puntos de interrupción en el bucle para comprobar que realmente hace cada iteración que debería?

Si la respuesta a la pregunta anterior es "sí", ¿se ejecuta cada iteración sin problemas o da algún error?


Se ejecuta todo bien pero no en todos los archivos que se encuentran en el directorio, o sea no me funciona el bucle.

ejem:

directorio
     archivo1.t01 ---- solo ejecuta en el primer archivo
     archivo2.t01
     archivo3.t01
     archivo4.t01


El invoke(Finished) es para que me imprima el resultado de la aplicación de los comandos.
En línea

El Benjo


Desconectado Desconectado

Mensajes: 392



Ver Perfil WWW
Re: COMANDOS MULTIPLES - VB
« Respuesta #13 en: 18 Junio 2014, 23:12 pm »

Modifica el código como sigue:

Código
  1. Try
  2.      For Each archivo As String In My.Computer.FileSystem.GetFiles(midirectorio, FileIO.SearchOption.SearchAllSubDirectories, "*.t01")
  3.            nombre = My.Computer.FileSystem.GetName(archivo)
  4.            cmdir = "cd " & midirectorio
  5.            comando = "runpkr00.exe -d " & nombre
  6.  
  7.            SW.WriteLine(cmdir)
  8.            SW.WriteLine(comando)
  9.            Results = SR.ReadToEnd
  10.            Invoke(Finished)
  11.        Catch e As Exception
  12.        End Try
  13.        Next
  14.        SW.Close()
  15.        SR.Close()
  16.    End Sub

Coloca un punto de interrupción en la línea del catch y fíjate en el error que arroja. Si no arroja ningún error no te queda de otra que colocar el punto de interrupción en la primera línea del bucle e ir ejecutando línea por línea para ver el error.
En línea

www.es.neftis-ai.com

Sí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.
rochro

Desconectado Desconectado

Mensajes: 42


Ver Perfil
Re: COMANDOS MULTIPLES - VB
« Respuesta #14 en: 18 Junio 2014, 23:58 pm »


Coloca un punto de interrupción en la línea del catch y fíjate en el error que arroja. Si no arroja ningún error no te queda de otra que colocar el punto de interrupción en la primera línea del bucle e ir ejecutando línea por línea para ver el error.

Benjo, realicé el paso a paso para ver el error y al parecer no termina el for porque llega hasta el punto
Código
  1. Results = SR.ReadToEnd
y de ahi termina o sea no finaliza el for .
En línea

El Benjo


Desconectado Desconectado

Mensajes: 392



Ver Perfil WWW
Re: COMANDOS MULTIPLES - VB
« Respuesta #15 en: 19 Junio 2014, 00:11 am »

Eso significa que se produce el error en esa línea. Me imagino que la función es creada en un hilo independiente del hilo principal, por eso es que no te salta error sólo sale del bucle y de la función... Y YA!

Para comprobar qué tipo de error es coloca el for dentro del tray/catch y coloca el punto de interrupción en la línea correspondiente al cath (como te indiqué en el código anterior) en la variable "e" estará la información correspondiente al error. Dinos cuál es para ver cómo se puede solucionar.
En línea

www.es.neftis-ai.com

Sí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.
rochro

Desconectado Desconectado

Mensajes: 42


Ver Perfil
Re: COMANDOS MULTIPLES - VB
« Respuesta #16 en: 19 Junio 2014, 00:21 am »

Eso significa que se produce el error en esa línea. Me imagino que la función es creada en un hilo independiente del hilo principal, por eso es que no te salta error sólo sale del bucle y de la función... Y YA!

Para comprobar qué tipo de error es coloca el for dentro del tray/catch y coloca el punto de interrupción en la línea correspondiente al cath (como te indiqué en el código anterior) en la variable "e" estará la información correspondiente al error. Dinos cuál es para ver cómo se puede solucionar.

En Results me bota Nothing y como te digo se queda en results y termina. No llega a la parte del Catch.

Código
  1. Try
  2.            For Each file As String In My.Computer.FileSystem.GetFiles(midirectorio, FileIO.SearchOption.SearchAllSubDirectories, "*.T01")
  3.  
  4.                nombre = My.Computer.FileSystem.GetName(file)
  5.                cmdir = "cd " & midirectorio
  6.                comando = "runpkr00.exe -d -s " & nombre
  7.                SW.WriteLine(cmdir)
  8.                SW.WriteLine(comando)
  9.                Results = SR.ReadToEnd
  10.                'SW.Close()
  11.                'SR.Close()
  12.                Invoke(Finished)
  13.            Next
  14.            Catch e As Exception
  15.        End Try
  16.        SW.Close()
  17.        SR.Close()
En línea

El Benjo


Desconectado Desconectado

Mensajes: 392



Ver Perfil WWW
Re: COMANDOS MULTIPLES - VB
« Respuesta #17 en: 19 Junio 2014, 05:41 am »

Ok, intenta llamar a la función dentro del mismo hilo para que la aplicación te bote el error y "a la fuerza" se detenga la ejecución. De esta manera podrás ver por qué la segunda vez que se ejecuta "Results = SR.ReadToEnd" No te funciona.

Estoy viendo otra cosa: No veo en ninguna parte del código que declares la variable Results. Puedes por favor poner cómo la declaras, creo que el error puede estar ahí.
En línea

www.es.neftis-ai.com

Sí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.
rochro

Desconectado Desconectado

Mensajes: 42


Ver Perfil
Re: COMANDOS MULTIPLES - VB
« Respuesta #18 en: 19 Junio 2014, 16:26 pm »

Ok, intenta llamar a la función dentro del mismo hilo para que la aplicación te bote el error y "a la fuerza" se detenga la ejecución. De esta manera podrás ver por qué la segunda vez que se ejecuta "Results = SR.ReadToEnd" No te funciona.

Estoy viendo otra cosa: No veo en ninguna parte del código que declares la variable Results. Puedes por favor poner cómo la declaras, creo que el error puede estar ahí.

Aquí te paso todo el código de mi aplicación pero ahora tengo otro problema y es que al momento de quitarle todos los puntos de interrupción ya no me ejecuta, se queda en My.Computer.FileSystem.CopyFile .
Cuando le quito el código
Código
  1. 'Results = SR.ReadToEnd
  2.            'SW.Close()
  3.            'SR.Close()
  4.            'Invoke(Finished)
y coloco el punto de interrupción en el for each me corre todo, algo debe de pasar con eso.



 
Código
  1. Imports System
  2. Imports System.IO
  3. Imports System.IO.StreamWriter
  4.  
  5. Public Class Form1
  6.    Inherits System.Windows.Forms.Form
  7.  
  8.    Private Results As String
  9.    Private Delegate Sub delUpdate()
  10.    Private Finished As New delUpdate(AddressOf UpdateText)
  11.  
  12.  Private Sub btnexaminar_Click(sender As Object, e As EventArgs) Handles btnexaminar.Click
  13.        Dim Dir As New FolderBrowserDialog
  14.        If Dir.ShowDialog = Windows.Forms.DialogResult.OK Then
  15.            TextBox1.Text = Dir.SelectedPath
  16.        End If
  17.    End Sub
  18.  
  19.    Private Sub btndat_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btndat.Click
  20.        Dim midirectorio As String = TextBox1.Text
  21.        Dim CMDThread As New Threading.Thread(AddressOf CMDAutomate)
  22.        If midirectorio = "" Then
  23.            MessageBox.Show("Debe seleccionar la ruta donde se encuentra la data", "Error", MessageBoxButtons.OKCancel, MessageBoxIcon.Error)
  24.        Else
  25.            My.Computer.FileSystem.CopyFile("C:\Program Files\convert data\runpkr00.exe", midirectorio & "\runpkr00.exe", Microsoft.VisualBasic.FileIO.UIOption.OnlyErrorDialogs, Microsoft.VisualBasic.FileIO.UICancelOption.DoNothing)
  26.        End If
  27.        CMDThread.Start()
  28.  
  29.    End Sub
  30.  
  31.    Private Sub CMDAutomate()
  32.        Dim midirectorio As String = TextBox1.Text
  33.        Dim myprocess As New Process
  34.        Dim StartInfo As New System.Diagnostics.ProcessStartInfo
  35.        StartInfo.FileName = "cmd"
  36.        StartInfo.RedirectStandardInput = True
  37.        StartInfo.RedirectStandardOutput = True
  38.        StartInfo.UseShellExecute = False
  39.        StartInfo.CreateNoWindow = True
  40.        myprocess.StartInfo = StartInfo
  41.        myprocess.Start()
  42.        Dim SR As System.IO.StreamReader = myprocess.StandardOutput
  43.        Dim SW As System.IO.StreamWriter = myprocess.StandardInput
  44.        Dim comando As String
  45.        Dim cmdir As String
  46.        Dim nombre As String
  47.  
  48.        For Each file As String In My.Computer.FileSystem.GetFiles(midirectorio, FileIO.SearchOption.SearchAllSubDirectories, "*.T01")
  49.  
  50.            nombre = My.Computer.FileSystem.GetName(file)
  51.            cmdir = "cd " & midirectorio
  52.            comando = "runpkr00.exe -d -s " & nombre
  53.            SW.WriteLine(cmdir)
  54.            SW.WriteLine(comando)
  55.            'Results = SR.ReadToEnd
  56.            'SW.Close()
  57.            'SR.Close()
  58.            'Invoke(Finished)
  59.        Next
  60.  
  61.        SW.Close()
  62.        SR.Close()
  63.  
  64.    End Sub
  65.  
  66.   Private Sub UpdateText()
  67.        Dim midirectorio As String = TextBox1.Text
  68.        Dim strStreamW As Stream = Nothing
  69.        Dim strStreamWriter As StreamWriter = Nothing
  70.        Dim fecha As String = DateTime.Now.ToString("dd MMM HHmmss") & ".txt"
  71.        Windows.Forms.Cursor.Current = Cursors.WaitCursor
  72.        Dim rutarchivo As String = String.Concat(midirectorio, "log-", fecha)
  73.        strStreamW = File.Create(rutarchivo)
  74.        strStreamWriter = New StreamWriter(strStreamW, System.Text.Encoding.Default)
  75.        strStreamWriter.WriteLine(Results)
  76.        strStreamWriter.Close()
  77.    End Sub
  78.  
En línea

El Benjo


Desconectado Desconectado

Mensajes: 392



Ver Perfil WWW
Re: COMANDOS MULTIPLES - VB
« Respuesta #19 en: 19 Junio 2014, 20:17 pm »

Lo que dices sobre las líneas de código:

Código
  1. 'Results = SR.ReadToEnd
  2. 'SW.Close()
  3. 'SR.Close()
  4. 'Invoke(Finished)

Una parte de eso ya te lo había dicho. No sé si recuerdes que te dije que eliminaras las líneas que cierran los streams. Y lo comentar la línea del invoke() y que funcione, pues tiene sentido. Lo que ocurre es que estás usando mal el delegado. Por alguna raón (no estoy seguro cual) sólo te funcionará el delegado la primera vez que lo utilices. Prueba dejando el bucle de la siguiente manera:

Código
  1. For Each file As String In My.Computer.FileSystem.GetFiles(midirectorio, FileIO.SearchOption.SearchAllSubDirectories, "*.T01")
  2.            nombre = My.Computer.FileSystem.GetName(file)
  3.            cmdir = "cd " & midirectorio
  4.            comando = "runpkr00.exe -d -s " & nombre
  5.            SW.WriteLine(cmdir)
  6.            SW.WriteLine(comando)
  7.            Results = SR.ReadToEnd
  8.            Finished = New delUpdate(AddressOf UpdateText)
  9.            Invoke(Finished)
  10.        Next

Es decir, asignando la dirección al delegado cada vez que lo quieras utilizar. En caso de que no te funcione puedes hacerlo dejando el código anterior como te lo dejé, pero eliminando la línea donde asignas la dirección del delegado. Y modificando la función UpdateText() de la siguiente manera:

Código
  1.    Private Sub UpdateText()
  2. If Me.InvokeRequired = False Then
  3.        Dim midirectorio As String = TextBox1.Text
  4.        Dim strStreamW As Stream = Nothing
  5.        Dim strStreamWriter As StreamWriter = Nothing
  6.        Dim fecha As String = DateTime.Now.ToString("dd MMM HHmmss") & ".txt"
  7.        Windows.Forms.Cursor.Current = Cursors.WaitCursor
  8.        Dim rutarchivo As String = String.Concat(midirectorio, "log-", fecha)
  9.        strStreamW = File.Create(rutarchivo)
  10.        strStreamWriter = New StreamWriter(strStreamW, System.Text.Encoding.Default)
  11.        strStreamWriter.WriteLine(Results)
  12.        strStreamWriter.Close()
  13. Else
  14. Dim D As delUpdate = new delUpdate(AddressOf UpdateText)
  15. Me.Invoke(D)
  16. End If
  17.    End Sub

Si cometí un error al escribir los nombres de las propiedades, busca las correctas (es que no estoy escribiendo desde Visual Studio).

Y sobre lo que dices del FileCopy(), la verdad no tengo idea de a qué se deba. ¿Qué error te da el depurador cuando la aplicación crashea?
En línea

www.es.neftis-ai.com

Sí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.
Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Conexiones multiples
Programación Visual Basic
demoniox12 5 2,644 Último mensaje 7 Diciembre 2007, 15:06 pm
por demoniox12
multiples checkbox en php
PHP
pet_cx 3 40,851 Último mensaje 29 Septiembre 2008, 04:45 am
por pet_cx
Multiples comandos simultaneos en mismo terminal.
Scripting
RocKHounD 0 6,117 Último mensaje 12 Enero 2011, 18:26 pm
por RocKHounD
Multiples Bucles o Multiples Esperas
.NET (C#, VB.NET, ASP)
DarkMatrix 8 5,510 Último mensaje 5 Septiembre 2011, 23:11 pm
por EddyW
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines