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

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Problema muy extraño con ShellEjecute
0 Usuarios y 2 Visitantes están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: Problema muy extraño con ShellEjecute  (Leído 9,167 veces)
Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.391


Ver Perfil
Re: Problema muy extraño con ShellEjecute
« Respuesta #10 en: 2 Mayo 2020, 21:10 pm »

Citar
pero si selecciono de nuevo el archivo y una vez vuelto a seleccionar  (obviamente la ruta no cambia ni se modifica a la vista, es exactamente la misma) si anda el ejecutador de mi programa... con solo volver a seleccionar lo mismo

El tema es que lo que selecciono es un bat, entonces en realidad el shell si lo ejecuta, pero se cierra rapidamente, como si fallara algo interno del bat, pero lo tan extraño que destaco, es que simplemente volviendo a cargar manualmente (con mi boton examinar) el archiv bat, si anda. Y la ruta no se modifica.

Es mas, en la linea anterior a ejecutar el shellejecute, puse un msgbox para que muestre al path del programa, y en ambos casos (cuando restauro el preset desde la base de datos, o seleccionado ahi mismo sin usar el recorset) el path es exactamente el mismo y no hay una / de menos o de mas o : o esas cosas..

que podrá ser?
Hablas de un modo inconcreto. No se puede adivinar que falla en un programa que falla, así, sin más.

Luego pones un vídeo (que no voy a ver), en vez de simplemente hacer un copypaste de texto, con el contenido del bat... y el contenido del código que hace la llamada al bat. Es rápido, es fácilmente consultable y se puede repasar cuantas veces sea preciso de forma rápida (un vídeo exige volver a verlo todo de nuevo y se pierde mucho tiempo con ello).

Si haces esto último marcado en negrita, pués se le podrá echar un vistazo rápido...


En línea

RiasChan

Desconectado Desconectado

Mensajes: 59

RiasChan BNS!


Ver Perfil
Re: Problema muy extraño con ShellEjecute
« Respuesta #11 en: 3 Mayo 2020, 00:43 am »

Esto pone el Path del archivo en el TXT Path:

Dim cadenita
 Dialogo.ShowOpen
txtPath.Text = Dialogo.FileName
txtSucia.Text = Dialogo.FileTitle
cadenita = Len(txtPath.Text)
If cadenita > 255 Then
MsgBox "La ruta de este programa es demasiado lejana, debe seleccionar una ruta más corta de destino", vbCritical
txtPath.Text = ""
Exit Sub
End If
c_var = 0


Cadenita es un simple método para que el cliente no me selecicone algo en la ultima subcarpeta del nucleo de system32 con 3000 subcarpetas previas.

txtsucia guarda el EXE, por que se usa para otra funcion del programa que no tiene problemas.

Si yo ahi le doy Play anda, anda con el ShellExecute:

Private Declare Function ShellExecute Lib "shell32.dll" Alias _
    "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, _
    ByVal lpFile As String, ByVal lpParameters As String, _
    ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
    
'---------- El boton Play:

ret = ShellExecute(Me.hwnd, "Open", txtPath, "", "", 3)


Ya ahi anda, sin problemas, el bat y lo que sea.

Luego este boton, Guarda los TXT en una base de datos:

Private Sub EntradaPreset()
    Dim rs As ADODB.Recordset
        If Not Conectar() Then Exit Sub
        Set rs = New ADODB.Recordset
            rs.Open ("Preset"), cn, adOpenKeyset, adLockOptimistic
            rs.AddNew
            rs!codigo = lblCodigoPreset
            rs!nombre = txtPreset
            rs!Path = txtPath
            rs!exenames = txtSucia
            rs.Update
            Set rs = Nothing
            Call contadorPreset
            Desconectar
End Sub


ContadorPreset es un bucle que guarda en otro registro un numero de codigo para no mezclar los registros de la BD


Luego, cargas esa preset desde el otro boton:

Private Sub LlamadaDeDatos()
Dim rs As ADODB.Recordset
Dim sql As String
If Not Conectar() Then Exit Sub
Set rs = New ADODB.Recordset
sql = "Select * FROM Preset WHERE nombre = '" + cboPreset.List(cboPreset.ListIndex) + "'"
rs.Open (sql), cn, adOpenKeyset, adLockOptimistic ' abre rs
txtPath.Text = ""
txtPath.Text = rs!Path
txtSucia.Text = rs!exenames
End If
Set rs = Nothing
Desconectar

end sub


Y le das play, con el primer ShellExecute, y anda con todos los archivos, excepto con el Bat Con el bat se cierra la ventana DOS al cargar los datos del Bat. El bat tiene esto:

setx GPU_FORCE_64BIT_PTR 0
setx GPU_MAX_HEAP_SIZE 100
setx GPU_USE_SYNC_OBJECTS 1
setx GPU_MAX_ALLOC_PERCENT 100
setx GPU_SINGLE_ALLOC_PERCENT 100
EthDcrMiner64.exe -epool us2.ethermine.org:4444 -ewal 0x8cce0e45e02439fe85f35b2235.MineraHanswellRX5epsw x -mport 0 -showdiff 1 -showpower 1 -dbg -1 -rxboost 0



Ahora, si desde el Examinar primero de todos que abre el CommonDialog, vuelves a seleccionar el archivo.bat (ya cargada la preset y con la falla) ... anda y no falla
, empieza a usar el bat sin problemas.

Tiene un par de cosas extrañas en los recordesets, pero si se consdidera que el ShellExecute toma la ruta completa y sin espacios ni carcateres ni barras de mas ni de menos, idénticos y funciona... pero no quiere funcionar con el bat... creo que el problma es algo del bat. Pero tampoco cuadara por que si se hace ese remedio casero si funciona... What Te FuAkckk





« Última modificación: 3 Mayo 2020, 00:49 am por RiasChan » En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.391


Ver Perfil
Re: Problema muy extraño con ShellEjecute
« Respuesta #12 en: 3 Mayo 2020, 01:41 am »

Bueno, solo he mirado (de momento) el primer parrafo.
Contienes un grave error...

Aunque revisas que el usuario no haya elegido un path inaccesible, no revisas que haya cancelado.
Si cancela, txtPath.Text, Dialogo.FileName, txtSucia.Text y Dialogo.FileTitle quedan con valor "".

Se puede preguntar por si están vacíos, pero es más cómodo tratarlo como un error.
Te pongo ese párrafo para solucionar ese caso, cuando revises que a pesar de ello te siguiere dando error, pués se revisa el resto del código.

Código
  1. Private Function SeleccionaFile() As Boolean
  2.    Dim cadenita
  3.  
  4.    With Dialogo
  5.        .DialogTitle = "Elija un fichero ejecutable..."
  6.        .Filter = "Ejecutables (.exe .com .vbs)|*.exe;*.com;*.vbs|Exe (.exe)|*.exe|Com (.com )|*.com|VB Script (.vbs)|*.vbs" ' ...etc...
  7.        .CancelError = True
  8.        On Error GoTo Cancelado
  9.        .ShowOpen
  10.  
  11.        txtPath.Text = .FileName
  12.        txtSucia.Text = .FileTitle
  13.    End With
  14.  
  15.    cadenita = Len(txtPath.Text)
  16.    If cadenita > 255 Then
  17.        MsgBox "La ruta de este programa es demasiado lejana, debe seleccionar una ruta más corta de destino", vbCritical
  18.        txtPath.Text = ""
  19.        Exit Function
  20.    End If
  21.  
  22.    SeleccionaFile = True
  23.    Exit Function
  24. Cancelado:
  25.    If (Err.Number = 32755) Then
  26.        MsgBox "el usuario ha cancelado la eleccion de fichero..."
  27.        ' hacer lo que corresponda a este caso... tipicamente no hacer nada al devolver.
  28.    Else
  29.        Call MsgBox("Ocurrio un error inesperado..." & CStr(Err.Number), , "Dialogo de seleccion de fichero")  ' no se espera que esto suceda... pero si alguna vez ocurre, al reportar el mensaje, hay por donde indagar...
  30.    End If
  31. End Function
  32.  
  33.  
  34.  
  35. ' ... despues... en la llamada
  36.  
  37. if (SeleccionaFile = TRUE) then
  38.  '... se invoca lo que sea que haces...
  39. else
  40.  ' pero si devuelve false, es lo mismo que si el usuaro no hubiera realizado ninguna accion
  41. end if
  42.  
  43.  

Por cierto, como dices que invocas un ejecutable, imagino que el control 'Commondialog' tiene filtrado para elegir solo ficheros ejecutables, no???. Que has establecido algún valor en las propiedades 'Filter'. Sino el usuario podría elegir cualquier cosa... he puesto un filter de ejemplo...
En línea

RiasChan

Desconectado Desconectado

Mensajes: 59

RiasChan BNS!


Ver Perfil
Re: Problema muy extraño con ShellEjecute
« Respuesta #13 en: 5 Mayo 2020, 04:00 am »

Amigo perdon que te responda asi, pero creo que no me comprendes.No uso el CommonDialog para cargar la preset, El shellExecute lee desde un TXT, que está ahí, legible, y si copias y pegas manualmente y lo abres, peus abre el bat, pero el shellexecute no lo hace. En el momento que falla, es completamente independiente del CommonDialog.

Lo mas triste es que cuando si uso el commond dialog  si anda.

El único problema que tiene es que cuando cargas la preset, y le das play ahi no lee los bat. Solo los bat. En primera instancia desde el commond dialog (y sin tener la modificacion que me diste) tampoco tira error y anda bien- (Seguramente lo haga si el usuario pone cancelar... Aunque tampoco quedaria texto en el txtpath, por lo cual ya salteria con mi cartel de error propio al dar play al programa...

No entiendo que relación puede tener el ShellExecute con el CommonDialog, ya que el ShellEjexute usa un txt para cargar la referencia y usar el programa, no el CommonDialog, y la direccion traida por el CommondDialog al TXtpath esta correcta.

Y no no hay filtro, el programa trae y ejecuta cualquier cosa. Ya probe fotos musica, lo que sea, y lo abre con el programa asociado predetermiandamente.

De hecho trae y ejecuta todo correctamente
En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.391


Ver Perfil
Re: Problema muy extraño con ShellEjecute
« Respuesta #14 en: 6 Mayo 2020, 15:27 pm »

Ok, te entiendo.

Si cuentas que el programa funciona correctamente de un modo pero no cuando tomas el mismo path, y lo pasas al shellexecute, las dos posibilidades más inmediatas son:
A - Problema con la redefinición del string pasado al shell execute.
B - Problemas de permisos sea del usuario o de la carpeta donde yace el fichero. Esto último e smás dependiente del S.O. que del programa, si el usuario toma los permisos adecuados o ejecuta el programa con permisos de administrador...

Incluso aún siendo esto último, por orden (si fuera el caso) procede examinar primero que el string recibido se pase correctamente a sehllexecute.

Seguiré leyendo tu mensaje previo para ver si aparece el código donde quede recogido dicha llamada y si aparece el contenido de uno de esos txt, donde conste la ruta, para dilucidar el posible problema.

...a la noche saco un ratito, lo reviso y te comento.
En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.391


Ver Perfil
Re: Problema muy extraño con ShellEjecute
« Respuesta #15 en: 7 Mayo 2020, 17:05 pm »

Citar
Si yo ahi le doy Play anda, anda con el ShellExecute:

Private Declare Function ShellExecute Lib "shell32.dll" Alias _
    "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, _
    ByVal lpFile As String, ByVal lpParameters As String, _
    ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
   
'---------- El boton Play:

ret = ShellExecute(Me.hwnd, "Open", txtPath, "", "", 3)

Ya ahi anda, sin problemas, el bat y lo que sea.
Luego este boton, Guarda los TXT en una base de datos:
...
ContadorPreset es un bucle que guarda en otro registro un numero de codigo para no mezclar los registros de la BD
Luego, cargas esa preset desde el otro boton:
...
Y le das play, con el primer ShellExecute, y anda con todos los archivos, excepto con el Bat Con el bat se cierra la ventana DOS al cargar los datos del Bat....
El caso es que al final no veo ningún string con las rutas que fallan y con las rutas que funcionan...
El contenido del bat, carece de importancia, lo mismo que carecería de importancia el contenido de un txt, o de una imagen, lo que dices que falla es la apertura.


Aísla la llamada a una función como esta (a fin de ver que rutas recibe y que errores genera).
Código
  1. Private Sub Ejecutar(ByRef Comando As String, ByRef Orden As String)
  2.    Static contador As Long
  3.    Const HANDLE_INSTANCIA As Long = 32
  4.  
  5.    Debug.Print contador ; comando;
  6.    contador  = (contador  + 1)
  7.  
  8.    ret = ShellExecute(Me.hwnd, orden, comando, "", "", 3)
  9.  
  10.    If (ret <= HANDLE_INSTANCIA) Then
  11.        Debug.Print " FALLO: " & ret
  12.    Else
  13.        Debug.Print
  14.    End If
  15. End Sub
  16.  

que se llamaría así:
Código
  1. call ejecutar(txtpath, "Open")

Ejecuta varias veces con los que funcionan y con los que no... haz luego una captura a la ventana debug ( y la subes a alguna web y la pones aquí), con las rutas y los valores de error, podrá determinarse qué sucede.
si además muestras la misma salida cuando dices que las ejecutas llamadas desde el commondialog, mejor que mejor, porque así podrá compararse las diferencias entre ambos paths.
En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Problema muy extraño con ShellEjecute
« Respuesta #16 en: 8 Mayo 2020, 05:25 am »

Me dio un poco de pereza leer las respuestas chonchas...

Pero me suena que es tema de primero ubicarte en el path de ejecucion y luego ejecutarlo. por lo que entendi Tu haces esto:

cargas el archivo y ejecutas

y si intentas

cargas el archivo -> te ubicas en el path -> Ejecutas

* Cargar el archivo no es ubicarte en la ruta...

Saludos.
En línea

The Dark Shadow is my passion.
RiasChan

Desconectado Desconectado

Mensajes: 59

RiasChan BNS!


Ver Perfil
Re: Problema muy extraño con ShellEjecute
« Respuesta #17 en: 7 Junio 2020, 11:32 am »

Hola, luego de enfriarme otros 30 dia, retomé esto y ya está la la causa (encontrada).

Resumen: El problema está al ejecutar directamente un archivo Bat (desconzoco si todos o solo ese) desde el ShellExecute. Me di cuenta por que decidí buscar archivos con los controles viejos Drive/Dir/file. Y éstos 3 me dejan en el txtPath literalmente  la ruta seleccionada, que termina en .LNK (yo el bat ese lo abro con un acceso directo). Entonces, tanto al instante de crearlo como al guardar y restaurar la preset, siempre es el LNK y al ejecutar el acceso directo funciona en todos los casos.

Pero el CommonControls, al poner un acceso directo ya me pone el vinculo directo en el txtpath, y de ahi todos los problemas de antes.

Ahora ¿¿por que??

En defnitiva, el problema está en el ShellExecute, o el método que use, al ejecutar directamente el BAT. Incluso ejectuando el accesodirecto que da al bat anda, pero el BAT en sí no... jamas vi algo tan extraño.
En línea

Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema extraño con ADO
Programación Visual Basic
icisneros 2 2,473 Último mensaje 27 Noviembre 2006, 17:58 pm
por icisneros
problema extraño
PHP
octavioxd 1 1,999 Último mensaje 12 Febrero 2010, 21:17 pm
por ~ Yoya ~
Problema muy extraño
Hardware
raul338 8 5,545 Último mensaje 5 Junio 2010, 17:18 pm
por naimad83
Problema extraño con ssh
GNU/Linux
frekency 1 3,005 Último mensaje 8 Diciembre 2010, 16:12 pm
por Bytheface
Problema de red extraño... « 1 2 »
Redes
Lucasmaniac 17 7,691 Último mensaje 3 Marzo 2014, 03:36 am
por dato000
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines