[Ayuda] Ejecutar .exe dentro de mi proyecto

Iniciado por Nedow, 23 Septiembre 2011, 07:04 AM

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

Nedow

Hola comunidad ^^ Bueno, realmente estoy aprendiendo acerca de esto, y no se mucho.. Me he leido algunos tutos de esta pagina, pero no logro hacer funcionar mi programa.. Quisiera que me prestaran su ayuda si es posible ^^;

Ya tengo el programa que lee un codigo desde X website (por ejemplo) el codigo funciona bien, digamos que es algo asi como un keygen.. Bueno, una vez que verifica el keygen quisiera que ejecutara el archivo "Nedow.exe" (Que esta insertado dentro de mi proyecto...

Ejemplo

Proyecto llamado "Ejecutable"
{
- Aqui van todos los files necesarios para que funcionen (form, .cs, etc..)
- Aqui tambien esta el archivo "Nedow.exe"
}

Una vez compilado creara el archivo "Ejecutable.exe" he intentado usar el
System.Diagnostics.Process.Start("Nedow.exe"); pero me da error porque ese archivo no se encuentra en la misma ruta que el "Ejecutable.exe" (Esta compilado dentro del mismo, recuerdas?

Bueno de antemano les agradeceria mucho la ayuda ;]

P.D Si mi explicacion fue un poco directa y confusa; Por favor hazmelo saber, y tratare de explicarla un poco mas

Editado, imagenes agregadas

Esta es la ventana principal del programa


Una vez validada la clave, quisiera ejecutar este archivo


Pero no tengo ni idea como hacerlo si esta compilado dentro del "key validator"

Keyen Night

A Process.Start se le pasa la ruta de un archivo en tu disco duro, no el nombre de un resources en tu proyecto, tu resources "Nedow.exe" no es un archivo que se llame así no quiere decir que es un ejecutable es solo el nombre del recurso y es una matriz de bytes, lo más lógico es que lo escribas en un archivo con File.WriteAllBytes o Stream, lo inicies con Process.Start, esperes la ejecución y elimines el archivo ( si así lo deseas ). Process.Start iniciado con un parámetro ProcessStartInfo brinda muchas cosas como por ejemplo iniciar el proceso oculto y esperar a que cierre si eso es lo que quieres.
La Fé Mueve Montañas...
                                    ...De Dinero

La programación es más que un trabajo es más que un hobby es una pasión...

Nedow

Cita de: Keyen Night en 23 Septiembre 2011, 19:37 PM
A Process.Start se le pasa la ruta de un archivo en tu disco duro, no el nombre de un resources en tu proyecto, tu resources "Nedow.exe" no es un archivo que se llame así no quiere decir que es un ejecutable es solo el nombre del recurso y es una matriz de bytes, lo más lógico es que lo escribas en un archivo con File.WriteAllBytes o Stream, lo inicies con Process.Start, esperes la ejecución y elimines el archivo ( si así lo deseas ). Process.Start iniciado con un parámetro ProcessStartInfo brinda muchas cosas como por ejemplo iniciar el proceso oculto y esperar a que cierre si eso es lo que quieres.

Muchas gracias por la respuesta.. No pude solucionar el problema, asi que creo que dejare el proyecto por ahora.. Seguire buscando guias por internet a ver que tal me va... Por cierto, Existe algun libro en especifico que me recomiendes para aprender mas sobre el tema? ;] Muchas gracias

Xuxero xD .

Cita de: Nedow en 24 Septiembre 2011, 00:42 AM
Muchas gracias por la respuesta.. No pude solucionar el problema, asi que creo que dejare el proyecto por ahora.. Seguire buscando guias por internet a ver que tal me va... Por cierto, Existe algun libro en especifico que me recomiendes para aprender mas sobre el tema? ;] Muchas gracias

unos videos Buenos de c# te recomiendo estos : http://13mandamientos.com/

WHK

No se puede hacer lo que quieres sin escribir el binario en un archivo a menos que tomes los bytes y lo pases por debugg.exe

De todas formas te recomiendo que hagas atraves de códigos lo mismo que hace ese .exe
Usa wininet para conectarte a otro sitio web y verificar el serial a menos que quieras usar sockets pero no será necesario.

Nedow

Cita de: WHK en 24 Septiembre 2011, 01:30 AM
No se puede hacer lo que quieres sin escribir el binario en un archivo a menos que tomes los bytes y lo pases por debugg.exe

De todas formas te recomiendo que hagas atraves de códigos lo mismo que hace ese .exe
Usa wininet para conectarte a otro sitio web y verificar el serial a menos que quieras usar sockets pero no será necesario.

Bueno si, el problema esta en que la declaracion para revisar el serial y todo, lo saque en c#, mientras que el programa esta hecho en visual basic (Realmente no se de esto ;/ lo hizo un amigo hace algun tiempo, aunque aun poseo el codigo fuente) por eso es que quiero "lanzar" el ejecutable directamente desde el c# pero veo que es muy complicado.. ;/...

P.D Gracias x los comentarios, y ese link Xuxero.. Aunque preferiria leerme algo tambien para ampliar las bases ;)

Keyen Night

#6
Te estás ahogando en un vaso de agua, simplemente debes hacer

Código (vb.net) [Seleccionar]

File.WriteAllBytes("C:\XXX.exe", My.Resources.XXX.exe)
Process.Start("C:\XXX.exe").WaitForExit()


Y si quieres controlar más la ejecución entonces usa una variable ProcessStartInfo, como por ejemplo iniciarlo oculto y esperar a que termine para continuar

Código (vb.net) [Seleccionar]

       Dim x As New ProcessStartInfo("C:\XXX.exe", "PARAMETROS")

       x.CreateNoWindow = True
       x.WindowStyle = ProcessWindowStyle.Hidden

       Process.Start(x).WaitForExit()


Si posees el código en C# te estás ahogando más aún :-[ por que pasar un código de C# a Vb.Net no es tan dificil y sino quieres hacerlo o no sabes como entonces compila el código de C# como una Dll y agregalo a tus dependencias en Vb.Net.
La Fé Mueve Montañas...
                                    ...De Dinero

La programación es más que un trabajo es más que un hobby es una pasión...

Nedow

Cita de: Keyen Night en 24 Septiembre 2011, 03:02 AM
Te estás ahogando en un vaso de agua, simplemente debes hacer

Código (vb.net) [Seleccionar]

File.WriteAllBytes("C:\XXX.exe", My.Resources.XXX.exe)
Process.Start("C:\XXX.exe").WaitForExit()


Y si quieres controlar más la ejecución entonces usa una variable ProcessStartInfo, como por ejemplo iniciarlo oculto y esperar a que termine para continuar

Código (vb.net) [Seleccionar]

       Dim x As New ProcessStartInfo("C:\XXX.exe", "PARAMETROS")

       x.CreateNoWindow = True
       x.WindowStyle = ProcessWindowStyle.Hidden

       Process.Start(x).WaitForExit()


Si posees el código en C# te estás ahogando más aún :-[ por que pasar un código de C# a Vb.Net no es tan dificil y sino quieres hacerlo o no sabes como entonces compila el código de C# como una Dll y agregalo a tus dependencias en Vb.Net.

Muchisimas gracias por toda tu ayuda ;) pude lograr que corriera el programa.. Lo unico que no me parece es el detalle que "extrae" el programa original (sin el 'keygen' validado) a la computadora.. Ya vere como soluciono eso ;3

De verdad te agradezco la ayuda ^^