none
¿Por qué no puedo obtener una referencia a un proceso remoto? Les explico RRS feed

  • Pregunta

  • Quiero obtener una referencia a un proceso remoto y uso esta línea

    Dim remoteById As Process = Process.GetProcessById(2345, "myComputer")

    Obviamente reemplazo los datos por el proceso del que quiero obtener una referencia. En el equipo local funciona,

    pero cuando lo pruebo para un equipo remoto, no funciona, me parece que es por un tema de seguridad o acceso.

    Quizá, algo relacionado con esto:

    https://msdn.microsoft.com/es-es/library/z15f82t9%28v=vs.80%29.aspx

    ¿Tienen alguna idea de como le concedo permisos o cómo relaciono SecurityPermission con Process?


    ?


    • Editado James-2016 lunes, 29 de febrero de 2016 5:16
    lunes, 29 de febrero de 2016 5:08

Respuestas

  • Has probado en recuperar primero todos los procesos del equipo remoto?

    Dim remoteAll As Process() = Process.GetProcesses("myComputer")
    

    pon un breakpoint y examina el valor de remoteAll

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    lunes, 29 de febrero de 2016 6:53
  • [...] es una red casera no hay dominio, son dos equipos conectados [...] ¿qué otra cosa puede ser?
    Insisto: se necesitan permisos. Con independencia de que además exista también algún otro problema, en cualquier caso el GetProcessById no funcionará si la cuenta del usuario que lo ejecuta no tiene permisos sobre el equipo en el que se está ejecutando. Y para que la cuenta tenga permisos, lo primero que hace falta es que el equipo remoto reconozca esa cuenta. Si no hay dominio, y se trata de una cuenta local del equipo llamante, lo más normal es que el equipo remoto no la reconozca. Puedes verificarlo examinando el Log de Seguridad de Windows; si te encuentras una entrada de "acceso denegado" cada vez que intentas llamar desde fuera al GetProcessById, eso indica que esa máquina no está reconociendo al usuario que le llega desde el otro equipo.
    lunes, 29 de febrero de 2016 7:13

Todas las respuestas

  • una pregunta... Los identificadores de proceso (PID) en la maquina remota existen? Es decir si buscas el pro eso 2345 en la maquina remota, ese PID existe en la lista de procesos abiertos?


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    lunes, 29 de febrero de 2016 5:44
  • yo haría una prueba usando Process.GetProcessesByName(String, String)

    o sea. Buscar los procesos por nombre. Por ejemplo notepad.exe


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    lunes, 29 de febrero de 2016 5:46
  • [...] no funciona [...] Quizá, algo relacionado con esto [SecurityPermission]

    Puede ser un tema de seguridad, pero casi seguro que no tiene nada que ver con el SecurityPermission. Este último solo se vería restringido si estuvieses lanzando el ejecutable en el equipo remoto a través de una carpeta de red, pero si estás lanzando un .exe que se encuentra en el disco local, entonces recibe al completo todos los permisos de CAS, incluyendo el SecurityPermission.

    Es más probable que te encuentres con un Access Denied, es decir, el usuario que está ejecutando el programa en el equipo local no tiene permisos de administración sobre la máquina remota. Asegúrate de que lo ejecutas con un usuario de Dominio que tiene permisos de administración sobre la máquina que has indicado como "myComputer".

    lunes, 29 de febrero de 2016 6:23
  • Gracias por responder es una red casera no hay dominio, son dos equipos conectados inalambricamente a través de un router, no detecta el proceso porque cuando vario el nombre del equipo me dice que no se pudo conectar al equipo, o sea que sí reconoce el equipo. Cuando pongo el nombre del equipo bien y le indico un PID que existe me sale un mensaje que el proceso no existe, como si no estuviera en ejecución. ¿qué otra cosa puede ser?
    • Editado James-2016 lunes, 29 de febrero de 2016 6:51
    lunes, 29 de febrero de 2016 6:38
  • Gracias por responder. Sí, estoy seguro que el proceso existe porque la obtengo mediante una funcion de dos líneas. Cuando corro el programa en la misma máquina el PID obtenido funciona correctamente.

    Para obtener el pid de la maquina remota, ejecuto el programa en la maquina remota, lo anoto y lo ingreso en la otra máquina desde la cual quiero obtener acceso, eso me da la seguridad que el PID existe.

    Y cuando ejecuto el programa que debe obtener el proceso remoto sé que detecta el equipo

    Sé que lo del nombre del equipo funciona bien porque si le varío una letra, el mensaje de error cambia y dice que no se puede conectar al equipo y se demora en más en dar respuesta como si estuviera reintentando.

    Cabe mencionar que es una red local de dos equipos conectados inalambricamente via router. Probé inhabilitando el firewall en ambos equipos y tampoco nada qué otra cosa puedo probar?






    • Editado James-2016 lunes, 29 de febrero de 2016 6:49
    lunes, 29 de febrero de 2016 6:44
  • Has probado en recuperar primero todos los procesos del equipo remoto?

    Dim remoteAll As Process() = Process.GetProcesses("myComputer")
    

    pon un breakpoint y examina el valor de remoteAll

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    lunes, 29 de febrero de 2016 6:53
  • [...] es una red casera no hay dominio, son dos equipos conectados [...] ¿qué otra cosa puede ser?
    Insisto: se necesitan permisos. Con independencia de que además exista también algún otro problema, en cualquier caso el GetProcessById no funcionará si la cuenta del usuario que lo ejecuta no tiene permisos sobre el equipo en el que se está ejecutando. Y para que la cuenta tenga permisos, lo primero que hace falta es que el equipo remoto reconozca esa cuenta. Si no hay dominio, y se trata de una cuenta local del equipo llamante, lo más normal es que el equipo remoto no la reconozca. Puedes verificarlo examinando el Log de Seguridad de Windows; si te encuentras una entrada de "acceso denegado" cada vez que intentas llamar desde fuera al GetProcessById, eso indica que esa máquina no está reconociendo al usuario que le llega desde el otro equipo.
    lunes, 29 de febrero de 2016 7:13
  • en tu maquina remota ejecuta el proceso que quieres buscar con el mismo usuario que luego vas a ejecutar tu exe y recuperar los procesos remotos. No se si me explico. Puede ser que estes recuperando los procesos de un usuario y en remoto se ejecutan con distinto.

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    lunes, 29 de febrero de 2016 7:14
  • Hola de nuevo, probé con:

    Process.GetProcessesByName(String, String)

    ¿devuelve una matriz noo?

    Es raro, me dice que no se puede conectar con el equipo remoto y al parecer con Process.GetProcessById si conecta pero igual no detecta el proceso.

    En una maquina local funciona bien, accedo con el indice 0, pero en una remota no :( ¿qué puede ser?



    • Editado James-2016 lunes, 29 de febrero de 2016 7:55
    lunes, 29 de febrero de 2016 7:53