Ejecutar .vbs con Vb.net

Iniciado por TMarmol, 10 Mayo 2013, 20:26 PM

0 Miembros y 1 Visitante están viendo este tema.

TMarmol

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

Shell Root

Entonces estás llamando mal, muestranos el código...
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

Danyfirex

algo así debería funcionar.

Código (vbnet) [Seleccionar]
  Process.Start("C:\WINDOWS\system32\cscript.exe", "C:\Testfiles\file.vbs")

saludos

Eleкtro

#3
@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 (vbnet) [Seleccionar]
Process.Start("wscript.exe", """" & "C:\ruta con espacios\Script.vbs" & """")
O así, como prefieras:
Código (vbnet) [Seleccionar]
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 (vbnet) [Seleccionar]
       If My.Computer.Network.Ping("www.google.com") Then
           MsgBox("success")
       Else
           MsgBox("no reply")
       End If


Si quieres algo más customizable aquí tienes una función que acabo de codear:
Código (vbnet) [Seleccionar]
#Region " Ping "

   ' [ Ping Function ]
   '
   ' // By Elektro H@cker
   '
   ' Examples :
   ' MsgBox(Ping("www.google.com"))
   ' MsgBox(Ping("www.google.com", 500))
   ' MsgBox(Ping("www.google.com", 500, New Byte(128) {}, False))
   ' MsgBox(Ping("www.google.com", 500, System.Text.Encoding.ASCII.GetBytes("Hello"), True))
   ' 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")

   Public Function Ping(ByVal Address As String, _
                          Optional ByVal TimeOut As Int64 = 200, _
                          Optional ByVal BufferData As Byte() = Nothing, _
                          Optional ByVal FragmentData As Boolean = False, _
                          Optional ByVal TimeToLive As Int64 = 128) As Boolean

       Dim PingSender As New System.Net.NetworkInformation.Ping()
       Dim PingOptions As New System.Net.NetworkInformation.PingOptions()

       If FragmentData Then PingOptions.DontFragment = False Else PingOptions.DontFragment = True
       If BufferData Is Nothing Then BufferData = New Byte(31) {} ' Sets a BufferSize of 32 Bytes
       PingOptions.Ttl = TimeToLive

       Dim Reply As System.Net.NetworkInformation.PingReply = PingSender.Send(Address, TimeOut, BufferData, PingOptions)

       If Reply.Status = System.Net.NetworkInformation.IPStatus.Success Then
           ' MsgBox("Address: " & Reply.Address.ToString)
           ' MsgBox("RoundTrip time: " & Reply.RoundtripTime)
           ' MsgBox("Time to live: " & Reply.Options.Ttl)
           ' MsgBox("Buffer size: " & Reply.Buffer.Length)
           Return True
       Else
           Return False
       End If

   End Function

#End Region


Saludos