reiniciar un programa

Tus preguntas. Algoritmos o Grupos de Comandos formando Programas Escripts.
Responder
Jonny
Profesional del Autoit
Mensajes: 1042
Registrado: 30 Jun 2008, 20:08

reiniciar un programa

Mensaje por Jonny »

Hola

Estoy intentando hacer, que el servidor en el que estoy trabajando contemple la posibilidad de administrarlo de forma remota además de local.

De esta forma si no me encuentro delante de la máquina en la que esté instalado puedo realizar algunas tareas de mantenimiento sobre el mismo.

Bien, he empezado por el comando "Restart" cuya función es reiniciar el servidor (como lo hace por ejemplo apache).
ya está terminado el código de éste comando, que antes de reiniciar el servidor realiza algunas comprobaciones a nivel de seguridad (password para la administración remota etc)
pero al hacer que por fin se reinicie la aplicación me encuentro con un problema:
si la aplicación se cierra, como es lógico no podrá auto iniciarse nuevamente (o eso creo) jejejeje.

Entonces, la solución que le dí pasó por hacer un programa independiente, que al ejecutarlo llamara al servidor.
De esta forma el servidor antes de cerrarse llama a éste mini-programa y se cierra. una vez se detecta en la otra aplicación que el servidor se cerró (mediante el proceso) se le llama para iniciarlo nuévamente y se cierra el programa auxiliar.

Una vez planteada la teoría, lo puse en práctica, no parecía ser muy difícil. Pero me encontré con que no hay forma de hacerlo funcionar.
Misteriosamente este código no funciona como debiera (ejecutar el programa auxiliar y cerrarse la aplicación).

Código: Seleccionar todo

Run(ScriptDir&"\restart.exe", "", @SW_HIDE)
Exit
Restart.exe se ejecuta, pero el programa que lo llama no se cierra.
Si quitamos la llamada a Restart.exe el programa se cierra sin problema.

(No pongo el código completo, sería inhumano pues ocupa muchíiiiiiisimo) y no creo que nadie vaya a analizarlo :P.
¿Alguien sabe porque ocurre esto?
lo hice así porque no se me ocurre otra forma, que si la hay será bien recibida.

Salu2!
Avatar de Usuario
Nahuel
Hacker del Foro
Mensajes: 194
Registrado: 27 Jun 2007, 23:32
Ubicación: Argentina
Contactar:

Re: reiniciar un programa

Mensaje por Nahuel »

Y por qué no:

Código: Seleccionar todo

$Key = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
RegWrite($Key,"Servidor","REG_SZ",@ScriptFullPath)
Antes de reiniciar?
O sea, que el programa que reinicia se escriba a si mismo en el registro para que una vez que el sistema inicie de nuevo, ejecute lo que querés que se ejecute.
No soy un hombre de plegarias, pero si estás en el cielo sálvame por favor Superman!
Jonny
Profesional del Autoit
Mensajes: 1042
Registrado: 30 Jun 2008, 20:08

Re: reiniciar un programa

Mensaje por Jonny »

Hola

Gracias por la respuesta.

No es exactamente así, necesito que se pueda reiniciar el programa sin necesidad de reiniciar la máquina.

Para Recoger cambios en la configuración etc.

Salu2!
Avatar de Usuario
Nahuel
Hacker del Foro
Mensajes: 194
Registrado: 27 Jun 2007, 23:32
Ubicación: Argentina
Contactar:

Re: reiniciar un programa

Mensaje por Nahuel »

Claro, que tonto.

Yo no veo nada malo con la linea que posteaste. Quizás el problema esté en el programa restart.exe.

Está bien tu idea. Llamar a una aplicación auxiliar que reinice el programa y salga. Yo lo haría algo así:

Restart.exe:

Código: Seleccionar todo

$Proceso = "notepad.exe"
$Ruta = @SystemDir & "\notepad.exe"

Do
	Sleep(500)
Until Not ProcessExists($Proceso)

Run($Ruta)
Si ejecutás notepad y luego este script, verás que al cerrar notepad se vuelve a abrir.

Si llamas desde tu programa a Restart.exe, éste último va a esperar que el programa que lo llamó (siempre y cuando le indiques qué programa lo llamó) se cierre para abrirlo nuevamente. Probablemente se te está pasando por alto algo muy básico, a todos nos pasa todo el tiempo. :smt001
No soy un hombre de plegarias, pero si estás en el cielo sálvame por favor Superman!
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: reiniciar un programa

Mensaje por Chefito »

Jajajaja.....con tanto apagar...encender....apagar...no me aclaro :smt033 . No entiendo muy bien lo que quieres, pero recuerda una cosa....cuando falla el comando Run, utiliza al Rey, ShellExecute. Espero que te sirva de algo.

Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
Jonny
Profesional del Autoit
Mensajes: 1042
Registrado: 30 Jun 2008, 20:08

Re: reiniciar un programa

Mensaje por Jonny »

Hola
jejejje
sí... es un poco lío ¿No?

Verás.

quiero, que el servidor que estoy haciendo pueda reiniciarse.
Para así, poder por ejemplo, cargar una nueva configuración o alguna actualización... etc.

Para ello, dado que no puede hacerse directamente en el mismo servidor ya que, si se cierra la aplicación no puede volver a ejecutarse por sí misma, he creado un programa auxiliar, que llamé Restart.exe.
de esa manera el servidor llama a restart.exe y debería cerrarse, ya que tras el run correspondiente puse un exit...
Una vez cerrado el servidor,Restart.exe seencarga de volver a ejecutar el servidor (server.exe)
la cosa está, en que misteriosamente server.exe no se cierra tras llamar a restart.exe, por lo que no se reinicia, simplemente queda Restart.exe en espera de que se cierre el servidor.

No creo que sea cosa de restart.exe, pues es un programa independiente qe nada tiene que ver (en teoría)


Decir, que lo llamo así:

Run(@Comspec&" /c restart.exe", "", @SW_HIDE)
lo digo, porque no se si tendrá algo que ver, aunque si lo llamo sin @comspec tampoco funciona.

Shellexecute? ¿como se llamaría a un programa con esa fnción? nunca la utilicé.

Gracias,

Salu2!
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: reiniciar un programa

Mensaje por Chefito »

Mmmmm.....ya me conoces y sabes lo que te voy a decir....1º hay que mirar en la ayuda :smt005 .
La definición de esa función es:
ShellExecute ( "filename" [, "parameters" [, "workingdir" [, "verb" [, showflag]]]] )
Un ejemplo sería:

Código: Seleccionar todo

ShellExecute("cmd.exe","/c dir /?",@SystemDir)
No creo que haga falta que te explique los parámetros no? Si por casualidad dudas en alguno dimelo.

En tu caso, sería algo así:

Código: Seleccionar todo

ShellExecute("cmd.exe","/c restart.exe",@SystemDir,"",@SW_HIDE)
Espero que tengas suerte y no se atasque :smt001 .

Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
Jonny
Profesional del Autoit
Mensajes: 1042
Registrado: 30 Jun 2008, 20:08

Re: reiniciar un programa

Mensaje por Jonny »

Hola
jijiji
sí, suponía que me lo dirías...

Lo probaré a ver que tal funciona. De momento lo solucioné cerrando el proceso directamente en el punto en que quiero que se cierre el programa (que bruto ¿Verdad? jejeje pero así sí funciona.
una curiosidad. aparentemente, ShellExecute() y run() hacen lo mismo... ¿Dónde está la diferencia entre una función y otra?

Lo digo, porque si con run el programa se pasa por alto el "Exit" quizá también lo haga con Shell execute.

De todas formas, es muy raro que no funcione, porque si después de "Exit" pongo por ejemplo un Msgbox() se ejecuta normalmente.

Salu2!
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: reiniciar un programa

Mensaje por Chefito »

Supongo que la diferencia está en la forma de iniciar un proceso :smt017 . La función ShellExecute utiliza la api de win que tiene este mismo nombre. La función Run si te digo la verdad no se que utilizará :smt017 .
Se tienen que diferenciar en algo seguro, porque a mi algunas veces no me ha funcionado Run del todo bien y en cambio ShellExecute sí. También se diferencian algo en sus parámetros. Comparalos y verás que ShellExecute tiene alguno más.

También hay otra posibilidad, aunque teniendo las dos anteriores no creo que hiciese falta, y es utilizar el comando de consola en modo oculto Start.

Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
Responder