SoloCodigo

CLR: .Net / Mono / Boo / Otros CLR => C# => Mensaje iniciado por: ragutierrez en Martes 13 de Marzo de 2012, 16:03

Título: Ejecutar procesos en otra maquina remotamente
Publicado por: ragutierrez en Martes 13 de Marzo de 2012, 16:03
Bueno la idea principal es la siguiente:
Desde un computador B se envía un mensaje al computador A cuando furtivamente se cierra un programa que es vital para un sistema X. Entonces el computador A, que recibe información de varios computadores, obtiene la IP del computador B y el computador A necesita volver a ejecutar el programa en el computador B para evitar pérdida de datos.

Estoy trabajando en un programita alterno para primeramente poder ejecutar cualquier programa de cualquier computador pero se me hace muy complicado... y estoy preguntando e investigando pero no encuentro información al respecto...  :think: :think: :think:

Ayudenme por favor...

Adjunto la solucion que tengo...
Título: Re:Ejecutar procesos en otra maquina remotamente
Publicado por: gabio2 en Martes 13 de Marzo de 2012, 18:39
Que tal ragutierrez, te comento que alguna vez me pidieron algo similar, sin embargo como el proyecto no siguio adelante deje de investigar, una posible solución puede ser la transmisión de datos a travéz de Sockets, te recomiendo leas aquí:

http://msdn.microsoft.com/es-es/library/w89fhyex%28VS.80%29.aspx

Voy a seguir investigando, si encuentro algo que te sirva te sigo apoyando..

Saludos.

Título: Re:Ejecutar procesos en otra maquina remotamente
Publicado por: rfog en Martes 13 de Marzo de 2012, 21:51
Si esos ordenadores no están en un controlador de dominio y/o terminal server, veo difícil que un ordenador pueda ejecutar algo en otro.

Necesitas hacerte un servicio de windows, que correrá en cada ordenador en donde tenga que ejecutarse dicho programa crítico. Ese servicio debe monitorizar la ejecución del programa (por ejemplo obteniendo la lista de procesos y comprobando si está, o que el programa abra un socket con el servicio). Luego ese servicio se encargará de comunicar al servidor qué ha pasado con el programa en cuestión mediante, de nuevo, un socket.

Claro que el servicio también puede caerse... pero en ese caso le marcas que se reinicie solo en las propiedades del servicio y windows se encarga.
Título: Re:Ejecutar procesos en otra maquina remotamente
Publicado por: U2_Caparzo en Miércoles 14 de Marzo de 2012, 00:35
bueno, suponiendo que se puede "esconder" un programa en ejecucion, osea que sea visible solo de la ventana de procesos, crear un timer en unos 30 segs, y revisar si tal proceso esta activo y si no iniciarlo, recuerdo hacer eso que era algo como

un bool que revisaba si existia el proceso
private bool existe()
{
Foreach (Process p in pr)
{
if (p.Name == nombreprocesoquedeseasmantenerabierto)
   return true;
}
return false;
}

entonces en el metodo del timer
if(existe == false)
   Process.Start("direccion del proceso necesario")

aunque no se si esto satisface todas tus necesidades
Título: Re:Ejecutar procesos en otra maquina remotamente
Publicado por: rfog en Jueves 15 de Marzo de 2012, 10:27
bueno, suponiendo que se puede "esconder" un programa en ejecucion, osea que sea visible solo de la ventana de procesos, crear un timer en unos 30 segs, y revisar si tal proceso esta activo y si no iniciarlo, recuerdo hacer eso que era algo como

un bool que revisaba si existia el proceso
private bool existe()
{
Foreach (Process p in pr)
{
if (p.Name == nombreprocesoquedeseasmantenerabierto)
   return true;
}
return false;
}

entonces en el metodo del timer
if(existe == false)
   Process.Start("direccion del proceso necesario")

aunque no se si esto satisface todas tus necesidades

En ese caso, si el programa vigilante se cae, ya no puedes hacer nada. En el caso de un servicio (más o menos con tu código) y se cae por cualquier motivo, windows lo vuelve a levantar automáticamente.
Título: Re:Ejecutar procesos en otra maquina remotamente
Publicado por: U2_Caparzo en Sábado 17 de Marzo de 2012, 20:13
bueno, suponiendo que se puede "esconder" un programa en ejecucion, osea que sea visible solo de la ventana de procesos, crear un timer en unos 30 segs, y revisar si tal proceso esta activo y si no iniciarlo, recuerdo hacer eso que era algo como

un bool que revisaba si existia el proceso
private bool existe()
{
Foreach (Process p in pr)
{
if (p.Name == nombreprocesoquedeseasmantenerabierto)
   return true;
}
return false;
}

entonces en el metodo del timer
if(existe == false)
   Process.Start("direccion del proceso necesario")

aunque no se si esto satisface todas tus necesidades

En ese caso, si el programa vigilante se cae, ya no puedes hacer nada. En el caso de un servicio (más o menos con tu código) y se cae por cualquier motivo, windows lo vuelve a levantar automáticamente.

A que te refieres con un servicio? es que la verdad no te entiendo muy bien :s

¿Que podria causar que el programa se cerrase?
Título: Re:Ejecutar procesos en otra maquina remotamente
Publicado por: rfog en Martes 20 de Marzo de 2012, 11:02
Explicación sobre los servicios: http://msdn.microsoft.com/es-es/library/d56de412(v=vs.90).aspx

El que una aplicación se cierre sola (sin que el usuario la cierre desde el administrador de tareas, por ejemplo) suele deberse a que tiene algún error. En teoría, y sin errores, no debería cerrarse nunca. Lo más típico cuando pasa algo así suelen ser fugas de memoria, acceso a memoria sin inicializar y/o recursos que no existen.

El .NET tiene un bug serio que hace que a veces las aplicaciones se cierren sin lanzar ninguna excepción (bueno, sí que las lanzan, pero se gestionan de forma oculta y la aplicación simplemente se cierra), aunque lo más común es que te salte la ventanita de la excepción no controlada (es una cosa que deberías mirar: si el usuario ve o no ve dicha ventana).

Y son tantas las cosas que pueden fallar (incluso en .NET)... ¿Usas hilos? ¿Sockets? ¿Alguna DLL de terceros? ...

Título: Re:Ejecutar procesos en otra maquina remotamente
Publicado por: corleoni31 en Viernes 23 de Marzo de 2012, 09:46
Alquien sabe como lanzar dos vídeos identicos en dos pc distintos y que esten sincronizados ? en C#
Gracias