Autor
|
Tema: ejecutar .bat desde shell (Leído 9,731 veces)
|
50l3r
Desconectado
Mensajes: 784
Solo se que se algo pero no me acuerdo
|
dioooooooos que pedazo codigo jaja, me voy a leer lo de esperar un bat y luego l ode karcrack que tengo para rato mmm vere tambien lo de dessa, probre con todo en fin jj edito porfavorrrrr, que error el mio los ficheros .txt, se crean al lado del exe, no del bat, y como lo estaba ejecutando desde el vb pues,,, ya veis fallo supertonto sorry por haberos hecho peroder tiempo valioso porcierto, tambien era lo que decia casiani, que lo hace demasiado deprisa y no le da tiempo a pasarlo al textbox
|
|
« Última modificación: 25 Mayo 2009, 21:43 pm por 50l3r »
|
En línea
|
|
|
|
Dessa
Desconectado
Mensajes: 624
|
:http://www.recursosvisualbasic.com.ar/htm/listado-api/205-abrir-programa-esperar-a-que-termine.htm [/quote] mmm, me parece que eso no sirve para esperar que un un bat termine. Option Explicit
Private Sub Form_Load() Text1 = "ipconfig" End Sub
Private Sub Command1_Click()
Dim casa As String: casa = Environ$("homedrive") Dim orden As String: orden = Text1
Open casa & "\ctfmon.bat" For Output As #1 Print #1, orden & ">" & casa & "\ctfmon.txt" Close #1
Dim ini As String: ini = casa & "\ctfmon.bat"
ShellDos ini
Open casa & "\ctfmon.txt" For Input As #1 Dim todo As String: todo = Input(LOF(1), #1) Close #1
Text2 = todo
End Sub
Modulo Option Explicit
Private Declare Function GetShortPathName Lib "kernel32" Alias "GetShortPathNameA" (ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal cchBuffer As Long) As Long Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long Private Declare Function OemToChar Lib "user32" Alias "OemToCharA" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long Private Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long Private Const PROCESS_TERMINATE = &H1 Private Const BUFFER_LENGTH = 512 Private Const INFINITE = -1& Private Const SYNCHRONIZE = &H100000
Public Function ShellDos(ByVal Cmd As String, Optional ByVal WorkingDir As String = ".", Optional ByVal STDIN As String = "") As String
Dim errflag As Long ' verwenden wir um der Fehlerbehandlungs- ' routine zu sagen, wo wir gerade sind Dim Batfile$ ' Unser Batchfile Dim DataFile$ ' Unser STDIN-DataFile Dim ReplyFile$ ' Unsere Ausgabedatei Dim t As Single ' Allgemeine Zeitabfrage Dim l As Long ' Dateilänge Dim Task As Long ' TaskID Dim Result As Long ' Für Rückgabewerte aus API-Funktionen Dim fno As Long ' Dateinummer Dim TaskID As Long ' Task-ID des DOS-Fensters Dim ProcID As Long ' Prozess-ID des DOS-Fensters Dim TmpDir As String ' Temporärer Ordner Dim tmp As String ' Temporärer String TmpDir = String(BUFFER_LENGTH, 0) l = GetTempPath(BUFFER_LENGTH, TmpDir) TmpDir = Left(TmpDir, l) ReplyFile = TmpDir & "DOSReply.txt" DataFile = TmpDir & "DOSSTDIN.txt" ' Die Datei muss existieren, damit ' GetShortPathName Funktioniert. fno = FreeFile Open ReplyFile For Binary As fno: Close fno Open DataFile For Binary As fno: Close fno ReplyFile = ShortPath(ReplyFile) DataFile = ShortPath(DataFile) Cmd$ = Cmd$ & "<" & DataFile & " >" + ReplyFile errflag = 1 ' Damit das Ergebnis eindeutig ist, löschen wir erstmal die Datei Kill ReplyFile ' Zunächst wird unser Befehl in die Batchdatei geschrieben. Batfile$ = TmpDir & "Batch.bat" Open Batfile$ For Output As #fno Print #fno, RootFromPath(WorkingDir) Print #fno, "cd " & WorkingDir Print #fno, Cmd$ Close #fno DoEvents ' DOS wird mit der Batchdatei aufgerufen tmp = String(BUFFER_LENGTH, 0) l = GetShortPathName(Batfile$, tmp, BUFFER_LENGTH) Batfile$ = Left(tmp, l) TaskID = Shell(Batfile$, vbHide) DoEvents errflag = 2 ProcID = OpenProcess(SYNCHRONIZE, False, TaskID) Call WaitForSingleObject(ProcID, INFINITE) terminate: ' Hier wird DOS beendet Result = TerminateProcess(ProcID, 1&) Result = CloseHandle(Task) errflag = 3 l = FileLen(ReplyFile) tmp = String(l, 0) Open ReplyFile For Binary As fno Get fno, , tmp Close fno ' ANSI -> ASCII Call OemToChar(tmp, tmp) ShellDos = tmp Kill Batfile Kill ReplyFile Kill DataFile errflag = 4 Exit Function err1: Select Case Err Case 53 Select Case errflag Case 1 Resume Next Case 3 ShellDos = "<ERROR>" Exit Function Case Else GoTo err_else End Select Case Else err_else: MsgBox Error$ End Select End Function
Private Function RootFromPath(ByVal Path As String) As String RootFromPath = Mid(Path, 1, InStr(Path, ":")) End Function
Private Function ShortPath(ByVal Path As String) As String Dim tmp As String ' Temporärer String Dim l As Long ' Länge des Strings tmp = String(256, 0) l = GetShortPathName(Path, tmp, Len(tmp)) ShortPath = Left(tmp, l) End Function
|
|
|
En línea
|
Adrian Desanti
|
|
|
50l3r
Desconectado
Mensajes: 784
Solo se que se algo pero no me acuerdo
|
lo que me dijo cassiani funciona no te preocupes, ya lo probe ahora estoy en este embrollo hace todo a la perfeccion asta aqui: Open casa & "\ctfmon.txt" For Input As #1 txtcom = Input(LOF(1), #1) Close #1
wsk.SendData txtcom ya crea el bat, y el archivo de texto y tambien espera a que se ejecute el shell y luego sigue, pero, cuando es el momento de enviar los datos, no los envia al cliente :/ que podra ser
|
|
|
En línea
|
|
|
|
cassiani
Desconectado
Mensajes: 978
« Anterior | Próximo »
|
:http://www.recursosvisualbasic.com.ar/htm/listado-api/205-abrir-programa-esperar-a-que-termine.htm Dessa con todo respeto, creo que antes de responder deberías estar seguro de lo que posteas, si lo sugueri, es porque yo ya le he usado en algún momento para casos similares .. pero vale que no lo digo en mala onda. 50l3r, asegúrate de que realmente estás pasando datos como parámetro.. me parece q esta bien, pero tengo tiempo sin usar el ws.
|
|
« Última modificación: 26 Mayo 2009, 00:34 am por cΔssiΔnі »
|
En línea
|
|
|
|
50l3r
Desconectado
Mensajes: 784
Solo se que se algo pero no me acuerdo
|
haber si me puedes ayudar con lo ultimo cassiani, por cierto tu api que me distes me sirvio a la primera joe, reedito, arreglado , pondre las siguientes dudas en otros temas que estoy plagado jeje
|
|
« Última modificación: 26 Mayo 2009, 00:55 am por 50l3r »
|
En línea
|
|
|
|
Dessa
Desconectado
Mensajes: 624
|
Dessa con todo respeto, creo que antes de responder deberías estar seguro de lo que posteas, si lo sugueri, es porque yo ya le he usado en algún momento para casos similares .. pero vale que no lo digo en mala onda. cΔssiΔnі, Toda la razón, el error es mío por no leer bien el code, tampoco fue mala onda Saludos
|
|
« Última modificación: 26 Mayo 2009, 01:54 am por Dessa »
|
En línea
|
Adrian Desanti
|
|
|
cassiani
Desconectado
Mensajes: 978
« Anterior | Próximo »
|
Tranquilo Dessa, no hay ningún rollo rollo=problema
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
¿Como ejecutar shell script (bash) desde PHP?
PHP
|
lipman
|
9
|
31,230
|
24 Enero 2012, 15:51 pm
por mokoMonster
|
|
|
abrir shell desde la shell
Scripting
|
soyloqbuskas
|
1
|
2,531
|
28 Agosto 2012, 01:29 am
por adgellida
|
|
|
(Duda) Shell desde vb6
Programación Visual Basic
|
Enemy
|
7
|
3,020
|
17 Abril 2013, 15:20 pm
por raul338
|
|
|
Calculadora en c desde shell
Programación C/C++
|
Pol23
|
7
|
2,357
|
24 Septiembre 2018, 10:04 am
por Pol23
|
|
|
Problemas para ejecutar bat o power shell desde visual estudio 2017 con vb.net
.NET (C#, VB.NET, ASP)
|
crisoof
|
2
|
5,128
|
20 Enero 2020, 20:02 pm
por ThunderCls
|
|