PDA

Ver la Versión Completa : Apagar ordenador remoto


Novás
23-07-2004, 09:45:17
Hola a todos...

He hechado un vistacillo por los foros y no he encontrado nada al respecto. Vereis...

Estoy intentando que, desde una aplicación delphi en mi ordenador pueda apagar un ordenador de la red solo conociendo su ip, o nombre de equipo. Además me gustaría que en este ordenador no tubiese que instalar ningún tipo de aplicación cliente ni nada por el estilo...

Es posible??. Muchas gracias por adelantado

Novás
23-07-2004, 09:46:17
Se me olvidaba, trabajo con windows xp en todas las máquinas

Neftali [Germán.Estévez]
23-07-2004, 11:08:06
Estoy intentando que, desde una aplicación delphi en mi ordenador pueda apagar un ordenador de la red solo conociendo su ip, o nombre de equipo. Además me gustaría que en este ordenador no tubiese que instalar ningún tipo de aplicación cliente ni nada por el estilo
Como mínimo deberás añadir a la lista de cosas que conoces del equipo un password de usuario para una cuenta válida en ese ordenador, sino creo que no tienes nada que hacer. :confused:

Puedes revisar esta API:

InitiateSystemShutdown

que te permite hacer eso sobreuna computadora de la red, pero al final te explica lo siguiente:

//-------------------------------------------------------------------
Remarks
To shut down the local computer, the calling process must have the SE_SHUTDOWN_NAME privilege. To shut down a remote computer, the calling process must have the SE_REMOTE_SHUTDOWN_NAME privilege on the remote computer. By default, users can enable the SE_SHUTDOWN_NAME privilege on the computer they are logged onto, and administrators can enable the SE_REMOTE_SHUTDOWN_NAME privilege on remote computers.
//-------------------------------------------------------------------

Vamos, que si no tienes permisos, no tienes nada que hacer...;)

Novás
23-07-2004, 11:39:03
Otra preguntilla, como puedo darle esos privilegios en la otra máquina...

Soy un tanto amater y no tengo ni idea. También agradecería un ejemplillo del uso de la función.

Muchas gracias

Neftali [Germán.Estévez]
23-07-2004, 12:37:37
Otra preguntilla, como puedo darle esos privilegios en la otra máquina...

No se trata de darle privilegios, se trata de que la cuenta de usuario que conoces en la otra máquina los tenga.
Es decir (y en esto que me corrija alguna otra persona si me equivoco), para hacer un "Remote shutdown" necesitas la IP de la otra máquina, un nombre de usuario definido en la otra máquina (entre las cuentas de usuario) y además ese usuario debe tener permisos de Administrador.

Si lo que quieres es darle permisos de Administrador a un usuario que no los tiene, lo que necesitas es conocer un usuario con permisos de Administrador, para darle los permisos de Admnistrador al usuario que no los tiene con el usuario que sí los tiene...;) ...no se si te has dado cuenta que siempre llegamos al mismo sitio.

Un saludo.

__hector
23-07-2004, 15:03:23
...O que pertenezca a los administradores definidos para el dominio al que pertenecen dichas maquinas

Novás
26-07-2004, 11:28:57
Hola de nuevo:

Veréis, estoy utilizando el siguiente código:

nombre:=InputBox('Intentar apagar equipo...','Introduzca el nombre o la dirección IP '+
'de la máquina que desea apagar','');
if nombre<>'' then
begin
sms:=InputBox('Mensaje al apagar equipo...','Introduzca el mensaje que desea que '+
'visualice el ordenador remoto.','');
if InitiateSystemShutdown(PChar(nombre),
PChar(sms),
4,
True,
False)=False then
begin
MessageDlg('No se ha apagado la máquina...'+#13+'Error: '+
SysErrorMessage( GetlastError ),
mtInformation,
[mbOk],
0);
end;
end;


Este código, cuando le asigno los privilegios de apagar el ordenador de forma remota al grupo todos me funciona, sino no funciona.
Mi pregunta es... ¿Con que usuario se conecta el programa al ejecutar esta función? ¿Con el usuario activo en la máquina destino? ¿Con el usuario activo en mi máquina? ¿Con otro usuario distinto?... ¿Como puedo lograr que mi programa se conecte como administrador en la máquina remota conociendo el password?

Muchas gracias por adelantado

__hector
26-07-2004, 14:51:57
Supongo que con el usuario activo de la maquina en el que corras el programa en delphi.

Novás
26-07-2004, 15:55:07
He probado a intentar apagar un equipo en forma remota utilizando yo la cuenta de adminstrador y el programa me devuelve el error de acceso denegado. Mientras que en la máquina remota el usuario administrador tiene permisos para apagar el ordenador en forma remota...
Por lo cual deduzco que esa suposición es incorrecta, yo creo que realmente el programa manda la orden y es el usuario que esté en ejecución en la máquina remota el que procesa el mensaje.
Lo interesante sería lograr que la orden que yo mando desde mi puesto el ordenador remoto la reconociese como si fuese una orden del administrador...pero...

¿Como envío la orden de apagado a un equipo remoto para que este la reconozca como
que debe ejecutarla como administrador del sistema?

jachguate
26-07-2004, 16:16:18
yo creo que realmente el programa manda la orden y es el usuario que esté en ejecución en la máquina remota el que procesa el mensaje.

Esto no tiene sentido, ya que entonces un usuario cualquiera podria apagar la máquina remota cuando el administrador la está usando, y en cambio, el administrador no podria hacerlo si quien está frente a ella es un usuario cualquiera.

Hasta luego.

;)

__hector
26-07-2004, 22:29:54
Me parece muy bonito que quieras lograr esto con delphi. Windows (XP al menos) te permite ejecutar un programa como otro usuario (click derecho, run as), prueba ejecutar el programa con la cuenta del administrador de dominio, o con la cuenta administrator de la maquina que quieres apagar.

Ahora bien, si quieres algo practico, te recomiendo que pruebes las pstools, herramientas de lineas de comando que te permiten, entre otras cosas, apagar remotamente maquinas en redes M$