Foro de elhacker.net

Sistemas Operativos => Windows => Mensaje iniciado por: ikkaku en 11 Marzo 2015, 17:02 pm



Título: Arrancar un programa sin llegar a ver el escritorio.
Publicado por: ikkaku en 11 Marzo 2015, 17:02 pm
Hola a todos !
Traigo una duda que me lleva atormentando varios dias.
Tengo una aplicacion hecha en Visual Studio ( C#) y  mas especificamente sirve para controlar todo lo relacionado con una tienda de repuestos.

Ahora viene la duda, como puedo hacer que al iniciar Windows se cargue mi aplicacion sin tener que pasar por el escritorio ? Lo de meterla en el menu Inicio ya lo he intentado pero tarda bastante en arrancar por lo que el trabajador tendria tiempo de pasearse por el escritorio, carpetas, menu Inicio etc. etc.
Yo lo que quiero es arrancar el ordenador y que despues del logo de Windows, mas tarde o mas temprano, se ejecute mi programa pero sin pasar por el Escritorio.

Otro tema es que tambien me gustaria que una vez arrancado el programa un usuario con mas privilegios ( jefe, tecnico...) pueda acceder al escritorio minimizando el programa. La programacion de eso lo tengo hecho pero me imagino que dentro de mi programa deberia arrancar primero el explorer.exe .

Espero que me podais ayudar.

Un saludo.


Título: Re: Arrancar un programa sin llegar a ver el escritorio.
Publicado por: Eleкtro en 11 Marzo 2015, 18:58 pm
Buenas

Si quieres iniciar una aplicación antes del inicio de la Shell (o la interfáz del Explorer), bajo Windows XP, Vista, 7, u 8 (aunque no lo he probado con todos), simplemente puedes modificar el valor userinit de la siguiente clave de registro:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon, que es un valor delimitado por comas, para añadir la ruta absoluta a tu aplicación, por ejemplo:

Código:
C:\Windows\System32\notepad.exe,C:\Windows\System32\userinit.exe



Sobre el tiempo de inicialización de tu aplicación desarrollada en C# (que dices que tarda bastante),
generalizando y por la naturaleza del JIT (Just-in-time compilation) un ensamblado .Net tarda bastante en inicializarse completamente (en comparación con otros binarios de otros lenguajes),
pero si quieres optimizar el tiempo transcurrido entre que se inicializa la aplicación y se muestra el Form principal, es decir, el boot-time (o Startup), entonces puedes utilizar el servicio NGEN (Native Image Generator), que reduce considerablemente el boot-time de cualquier ensamblado .Net debido a que, a diferencia del JIT, el ensamblado ya ha sido compilado a código de máquina (machine code) antes de iniciar la aplicación (el JIT siempre lo compila a código de máquina durante el Startup de la aplicación), pero por contra, al utilizar NGEN reducirás el rendimiento general de la aplicación, su tiempo de respuesta, aunque no llegarás a apreciar esa disminuición de rendimiento a menos que tu aplicación sea muy "pesada", aunque también podemos decir lo mismo sobre notar el tiempo transcurrido del startup entre NGEN <> JIT xD.

Ambos tienen sus beneficios y sus contras, tu decides que prefieres, el JIT para un startup lento con un rendimiento normal de la aplicación, o NGEN para un startup rápido con un rendimiento lento de la aplicación.



Otro tema es que tambien me gustaria que una vez arrancado el programa un usuario con mas privilegios ( jefe, tecnico...) pueda acceder al escritorio minimizando el programa. La programacion de eso lo tengo hecho pero me imagino que dentro de mi programa deberia arrancar primero el explorer.exe .

Y, digo yo, ¿por qué ese empeño en dejar sin patas a una mesa?, quiero decir, el escritorio es una parte importante de Windows, ¿que necesidad encuentras para querer ocultar el entorno del escritorio mientras el end-user utiliza tu app?.

De todas formas, es suficiente con matar e iniciar el proceso cuando lo creas conveniente, puedes recurrir a la utilización de la Class System.Diagnostics.Process para llevar a cabo ambas tareas.

Si tienes alguna duda sobre estos temas relacionado con C#, publícala en el subforo dedicado a la programación .Net y allí te ayudaré(mos).

PD: Cuando formules una pregunta sobre Windows, cómo mínimo especifica que versión utilizas, no somos magos.

Saludos!


Título: Re: Arrancar un programa sin llegar a ver el escritorio.
Publicado por: ikkaku en 11 Marzo 2015, 20:10 pm
He probado a modificar el registro Shell y el de userinit pero cuando reinicio vuelve a los valores predeterminados.

Lo que quería decir es que suponiendo que modificando el registro, explorer.exe no estaría ejecutado  y de alguna manera debería hacerlo mi programa. Lo que quiero es que no cualquiera pueda tener acceso al escritorio.

Perdón me olvide de decir que es Windows 7 64 bits.


Título: Re: Arrancar un programa sin llegar a ver el escritorio.
Publicado por: Eleкtro en 12 Marzo 2015, 09:21 am
Lo que quería decir es que suponiendo que modificando el registro, explorer.exe no estaría ejecutado  y de alguna manera debería hacerlo mi programa.

Entonces lo que pretendes hacer es deshabilitar la shell y punto, jeje.

Accede a la siguiente clave de registro:
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon

Crea un nuevo valor de tipo REG_SZ con el nombre Shell (en caso de que no exista), y en los datos del valor especifica la ruta absoluta a tu programa (ej: C:\Application.exe).

ADVERTENCIA:
Lo que quieres hacer es interferir en el comportamiento del SO, y dicha modificación del registro prevendrá la inicialización de la Shell de Windows por tu propia Shell, es decir, no vas a poder acceder de forma natural a características cómo el menú contextual, o atajos del teclado (hotkeys) para iniciar aplicaciones cómo el administrador de tareas para inicializar el explorer manualmente (a menos que desde tu programa ejecutes el administrador de tareas o los programas que quieras).

Por ende, si haces la modificación del registro, primero prepara tu aplicación para que sea capaz de ejecutar el proceso 'explorer.exe', de lo contrario lo verás dificil para revertir el cambio;
puedes revertir la modificación eliminando el valor que creaste en el registro desde la misma cuenta de usuario (en caso de que pudieras acceder al regedit o correr un Script), o desde otra cuenta de usuario por ejemplo cargando el HIVE del registro del usuario que creó dicho valor.

Mi recomendación es que primero crees una nueva cuenta de usuario, te loguees en dicha cuenta, y desde allí haces la modificación en el registro para testear las capacidades de tu aplicación.

Saludos!


Título: Re: Arrancar un programa sin llegar a ver el escritorio.
Publicado por: beholdthe en 12 Marzo 2015, 16:37 pm
Elektro como siempre un crack en este tipo de cosas.
Me has dado ideas para hacer otra cosilla similar a esta, gracias.
 ;-) ;-) ;-) ;-) ;-)


Título: Re: Arrancar un programa sin llegar a ver el escritorio.
Publicado por: Eleкtro en 12 Marzo 2015, 20:30 pm
Me has dado ideas para hacer otra cosilla similar a esta, gracias.
 ;-) ;-) ;-) ;-) ;-)

Genial, mientras no utilices esa información para hacer el mal xD.

Me alegro de que el "tip" le haya servido a alguien de utilidad.

Saludos


Título: Re: Arrancar un programa sin llegar a ver el escritorio.
Publicado por: beholdthe en 12 Marzo 2015, 20:43 pm
Genial, mientras no utilices esa información para hacer el mal xD.

Me alegro de que el "tip" le haya servido a alguien de utilidad.

Saludos

Yo ya no tengo edad para hacer el mal. :D
No, es otra cosa, y me has dado la idea haciéndolo mediante el registro, que de esto controlas un montón.


Título: Re: Arrancar un programa sin llegar a ver el escritorio.
Publicado por: ikkaku en 13 Marzo 2015, 16:04 pm
Entonces lo que pretendes hacer es deshabilitar la shell y punto, jeje.

Accede a la siguiente clave de registro:
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon

Crea un nuevo valor de tipo REG_SZ con el nombre Shell (en caso de que no exista), y en los datos del valor especifica la ruta absoluta a tu programa (ej: C:\Application.exe).

ADVERTENCIA:
Lo que quieres hacer es interferir en el comportamiento del SO, y dicha modificación del registro prevendrá la inicialización de la Shell de Windows por tu propia Shell, es decir, no vas a poder acceder de forma natural a características cómo el menú contextual, o atajos del teclado (hotkeys) para iniciar aplicaciones cómo el administrador de tareas para inicializar el explorer manualmente (a menos que desde tu programa ejecutes el administrador de tareas o los programas que quieras).

Por ende, si haces la modificación del registro, primero prepara tu aplicación para que sea capaz de ejecutar el proceso 'explorer.exe', de lo contrario lo verás dificil para revertir el cambio;
puedes revertir la modificación eliminando el valor que creaste en el registro desde la misma cuenta de usuario (en caso de que pudieras acceder al regedit o correr un Script), o desde otra cuenta de usuario por ejemplo cargando el HIVE del registro del usuario que creó dicho valor.

Mi recomendación es que primero crees una nueva cuenta de usuario, te loguees en dicha cuenta, y desde allí haces la modificación en el registro para testear las capacidades de tu aplicación.

Saludos!

Muchas gracias Elektro.
El cambio de registro en HKEY Current user no ? Es que no estoy seguro y prefiero preguntar por no liarla.
He visto ademas que hay un programa que se llama Instansheller que lo modifica automaticamente con lo que tu le digas.Eso podria valerme ?

El tema de abrir el "explorer.exe" lo podria hacer con un System.Process.Start y llamar a explorer.exe o hay que hacerlo a traves del administrador de tareas ?

Un saludo.


Título: Re: Arrancar un programa sin llegar a ver el escritorio.
Publicado por: Eleкtro en 13 Marzo 2015, 18:14 pm
El cambio de registro en HKEY Current user no ? Es que no estoy seguro y prefiero preguntar por no liarla.
La raíz HKEY_LOCAL_MACHINE (o HKLM) afecta a todo el grupo de usuarios, y la rama HKEY_CURRENT_USER (o HKCU) afecta al usuario activo.
Si, realiza las modificaciones en HKCU.

He visto ademas que hay un programa que se llama Instansheller que lo modifica automaticamente con lo que tu le digas.Eso podria valerme ?
Ni idea de lo que es eso. He buscado "Instant Sheller" por curiosidad y me sale una aplicación para el emulador M.A.M.E de video juegos arcade...
No uses cosas raras si no estás seguro de para que sirven.

El tema de abrir el "explorer.exe" lo podria hacer con un System.Process.Start y llamar a explorer.exe o hay que hacerlo a traves del administrador de tareas ?
El explorer es un proceso y el taskmanager otro, son procesos cómo otros cualquiera, por ende, ¿por qué usar el taskmanager cómo medio para iniciar un proceso secundario, pudiendo iniciar el proceso directamente?.
Sí, puedes utilizar el método Start de la Class Process (System.Diagnostics.Process) para ejecutar el explorer.exe.

Saludos


Título: Re: Arrancar un programa sin llegar a ver el escritorio.
Publicado por: ikkaku en 18 Marzo 2015, 17:38 pm
Buenas !
Consegui hacerlo al final con el InstantSheller.
 En vez de poner el frontend que seria el emulador de las recreativas, he puesto mi programa con el botoncito que arranca el explorer.exe y todo perfecto. Lo que si tuve que hacer es desactivar el antivirus a la hora de establecer el programa de arranque por que no dejaba modificar el registro.

Un saludo y gracias :D


Título: Re: Arrancar un programa sin llegar a ver el escritorio.
Publicado por: rj8810_@hotmail.com en 2 Octubre 2016, 04:47 am
hola.....la verdad tengo 2 asunto,,ayudame porfa.. 1.- como hago para iniciar un programa o video justo cuando oprimo el boton de encendido (para que funcione como un dvd o t.v., que cuando los prendes inmediatamente se ven los videos o peliculas, ) esto es para que las personas cuando prendan mi pc vean un video inmediatamente sin tener que esperar a que se cargue windows.....y la otra....2.- como ejecuto una aplicacion o video antes de que se vea el escritorio de windows...justo un milisegundo despues de logearme e iniciar secion, osea que el video se ejecute antes de exploprer. exe y antes que se vea el escritorio...ayudame porfa.......se ve que tu si sabe.....  yo se muy poco en esto de la programacion...asi que si me ayudas te pido el favor de ser muy especifico..o si sabes de algun video en youtube u otro sitio te lo agradecería me dijeras....tengo win 7 ultimate sp1



 hola a todos soy muy nuevo aqui, se casi nada de programacion...he logrado lanzar una aplicacion (videoinstructivo mediante bath) antes del explorer.exe. lo logre modificando la clave shell explorer.exe de winlogon en donde borre explorer.exe y puse la ruta de un bat modificado a .exe, el bat tenia la funcion de lanzar el video en pantalla completa, esperar lo que duraba el video y despues lanzar el explorer.exe, ubicado en c:\windows.explorer.exe, pero cuando el bath ejecuta el explorer.exe lo que hace es abrir la ventana de explorador de windows pero no muestra la barra de herramientas ni el escritorio con sus iconos......

el problema del explorer.exe es que tiene 2 caras, por un lado es el shell de windows con su barra de tareas, iconos del escritorio y demás. y por otro es simplemente una ventana de explorador que nos permite navegar por el árbol de directorios...pero yo nesecito que el bat ejecute el shell explorer.exe que muestra la barra de tareas escritorio etc...

lo curioso es el el bath funciona a la perfeccion cuando hice un ensallo con el administrador de tareas..... le doy en finalizar al explorer.exe, despues ejecuto el bat.... y muestra el video y depsues ejecuta el explorer.exe y me sale la barra de herammientas etc...y todo muy bien...pero cuando apago y prendo el pc el bath ejecuta el explorer.exe pero solo se abre una ventana del explorador...............

bueno creo que he sido muy especifico tengo win 7 ultimate....
alguien puede darme una mano y ayudarme porfa....es urgente....????gracias

[mod] no se hace doble post ni se escribe en mayusculas, leer reglas del foro.