Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: TMarmol en 10 Mayo 2013, 20:26 pm



Título: Ejecutar .vbs con Vb.net
Publicado por: TMarmol en 10 Mayo 2013, 20:26 pm
tengo un pequeño programa, en el que se llama al cmd para hacer ping a una direccion ip, para que ese archivo se ejecutara de modo oculto, he creado un archivo con la extension vbs.

La cosa es que al ejecutar el archivo .vbs desde mi programa me sale un error del script diciendo que el archivo no existe, en cambio si lo ejecuto manualmente se abre perfectamente.

Gracias de antemano


Título: Re: Ejecutar .vbs con Vb.net
Publicado por: Shell Root en 10 Mayo 2013, 23:20 pm
Entonces estás llamando mal, muestranos el código...


Título: Re: Ejecutar .vbs con Vb.net
Publicado por: Danyfirex en 11 Mayo 2013, 00:14 am
algo así debería funcionar.

Código
  1.  Process.Start("C:\WINDOWS\system32\cscript.exe", "C:\Testfiles\file.vbs")

saludos


Título: Re: Ejecutar .vbs con Vb.net
Publicado por: Eleкtro en 11 Mayo 2013, 08:10 am
@TMarmol

1. No es necesario que crees primero un bat y luego un vbs para ejecutar el bat oculto, pues no estás usando Batch, estás en un lenguaje de verdad, aquí puedes usar la Class Process para definir las opciones del proceso y ejecutar el bat oculto. (windowstyle.hidden)
http://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspx
http://msdn.microsoft.com/en-us/library/system.diagnostics.processwindowstyle.aspx

2. Debes tener en cuenta las comillas dobles y los nombres con espacio en los argumentos, como en Batch.

...Quizás eso es lo que te falla, si no muestras el código no lo sé, así que siguiendo el ejemplo de DanyFirex... sería así:
Código
  1. Process.Start("wscript.exe", """" & "C:\ruta con espacios\Script.vbs" & """")
O así, como prefieras:
Código
  1. Process.Start("wscript.exe", ControlChars.Quote & "C:\ruta con espacios\Script.vbs" & ControlChars.Quote)


De todas formas yo sólamente usaría la CMD si no hubiera otra alternativa, no sé exáctamente cuales son las intenciones de tu código Bat pero ...¿Has pensado en hacer ping usando los metodos del .NET?:

Esto es lo más sencillo:
Código
  1.        If My.Computer.Network.Ping("www.google.com") Then
  2.            MsgBox("success")
  3.        Else
  4.            MsgBox("no reply")
  5.        End If

Si quieres algo más customizable aquí tienes una función que acabo de codear:
Código
  1. #Region " Ping "
  2.  
  3.    ' [ Ping Function ]
  4.    '
  5.    ' // By Elektro H@cker
  6.    '
  7.    ' Examples :
  8.    ' MsgBox(Ping("www.google.com"))
  9.    ' MsgBox(Ping("www.google.com", 500))
  10.    ' MsgBox(Ping("www.google.com", 500, New Byte(128) {}, False))
  11.    ' MsgBox(Ping("www.google.com", 500, System.Text.Encoding.ASCII.GetBytes("Hello"), True))
  12.    ' For X As Int32 = 1 To 10 : If Not Ping("www.google.com", 1000) Then : MsgBox("Ping try " & X & " failed") : End If : Next : MsgBox("Ping successfully")
  13.  
  14.    Public Function Ping(ByVal Address As String, _
  15.                           Optional ByVal TimeOut As Int64 = 200, _
  16.                           Optional ByVal BufferData As Byte() = Nothing, _
  17.                           Optional ByVal FragmentData As Boolean = False, _
  18.                           Optional ByVal TimeToLive As Int64 = 128) As Boolean
  19.  
  20.        Dim PingSender As New System.Net.NetworkInformation.Ping()
  21.        Dim PingOptions As New System.Net.NetworkInformation.PingOptions()
  22.  
  23.        If FragmentData Then PingOptions.DontFragment = False Else PingOptions.DontFragment = True
  24.        If BufferData Is Nothing Then BufferData = New Byte(31) {} ' Sets a BufferSize of 32 Bytes
  25.        PingOptions.Ttl = TimeToLive
  26.  
  27.        Dim Reply As System.Net.NetworkInformation.PingReply = PingSender.Send(Address, TimeOut, BufferData, PingOptions)
  28.  
  29.        If Reply.Status = System.Net.NetworkInformation.IPStatus.Success Then
  30.            ' MsgBox("Address: " & Reply.Address.ToString)
  31.            ' MsgBox("RoundTrip time: " & Reply.RoundtripTime)
  32.            ' MsgBox("Time to live: " & Reply.Options.Ttl)
  33.            ' MsgBox("Buffer size: " & Reply.Buffer.Length)
  34.            Return True
  35.        Else
  36.            Return False
  37.        End If
  38.  
  39.    End Function
  40.  
  41. #End Region

Saludos