C/Visual C - Lanzar un proceso remoto

 
Vista:

Lanzar un proceso remoto

Publicado por Juan (1 intervención) el 13/03/2003 11:51:16
Hola a todos,
Estoy intentando lanzar un proceso remotamente pero me interesa que se ejecute en la máquina remota. El sistema operativo es Windows2000 y el compilador es Visual C++6. Estoy buscando alguna manera 'sencilla' de hacerlo, si es posible con alguna instrucción del tipo '_spawn', o similar (con estas sólo he conseguido ejecutar en la máquina que lanza el proceso ...). Sé que hay otras formas que requieren un proceso mas elaborado como arquitecturas cliente-servidor o similares, aunque como he comentado busco algo mas 'directo'. Tampoco sé si esto es posible bajo Windows.
Agradecería cualquier solución, incluso tener la certeza de la imposibilidad de realizar lo que busco bajo Windows.

Gracias y un saludo para todos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Lanzar un proceso remotamente en Windows 2000 usando Visual C++ 6

Publicado por Alejandro (1153 intervenciones) el 09/05/2025 20:10:33
Lanzar un proceso en una máquina remota directamente desde un programa en C++ en Windows no es tan sencillo como usar funciones como `_spawn`, ya que estas funciones están diseñadas para ejecutar procesos en la máquina local. Sin embargo, hay algunas maneras de hacerlo en Windows, aunque pueden requerir un poco más de trabajo.

Métodos para ejecutar un proceso remotamente en Windows:



1. Uso de `CreateProcess` con `Remote Desktop Protocol (RDP)`:
- Si tienes acceso a la máquina remota a través de RDP, puedes usar `CreateProcess` en combinación con la función `WTSQuerySessionInformation` para obtener información sobre la sesión remota y ejecutar un proceso en esa sesión. Sin embargo, esto puede ser complicado y no siempre es confiable.

2. Uso de `PsExec`:
- Una opción más sencilla es utilizar una herramienta de línea de comandos llamada `PsExec`, que forma parte de la suite de Sysinternals de Microsoft. `PsExec` permite ejecutar procesos en máquinas remotas de manera sencilla. Puedes invocar `PsExec` desde tu programa en C++ usando `_spawn` o `system()`.
- Ejemplo de uso de `PsExec`:
1
system("psexec \\nombre_maquina_remota -u usuario -p contraseña cmd /c tu_comando");

3. Uso de `Windows Management Instrumentation (WMI)`:
- WMI permite ejecutar procesos en máquinas remotas. Esto requiere un poco más de configuración y conocimiento sobre cómo interactuar con WMI desde C++. Puedes usar la clase `Win32_Process` para crear un nuevo proceso en la máquina remota.
- Ejemplo básico (requiere configuración de WMI):
1
2
3
4
5
6
7
// Este es un ejemplo conceptual, necesitarás incluir las bibliotecas adecuadas y manejar la inicialización de COM.
HRESULT hres;
hres = CoInitializeEx(0, COINIT_MULTITHREADED);
hres = CoInitializeSecurity(NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_DEFAULT, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, NULL);
IWbemLocator *pLoc = NULL;
hres = CoCreateInstance(CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID *)&pLoc);
// Conectar a la máquina remota y ejecutar el proceso...

Conclusión:


Lamentablemente, no hay una forma "sencilla" de ejecutar un proceso en una máquina remota directamente desde Visual C++ 6 sin utilizar herramientas externas o configuraciones más complejas. La opción más directa y fácil sería usar `PsExec`, ya que es una herramienta diseñada para este propósito y no requiere una configuración extensa.

Si decides optar por WMI, ten en cuenta que necesitarás manejar la configuración de seguridad y permisos en la máquina remota.

Espero que esta información te sea útil y te ayude a encontrar una solución adecuada para tu problema. ¡Buena suerte, Juan!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar