2010-02-11 39 views
7

Quiero ejecutar de forma remota otra aplicación de mi programa C++. Hasta ahora jugué junto con la función CreateProcess (...) y funciona muy bien.Ejecutar otro programa en C++

El problema, sin embargo, es que necesito la ruta completa del otro programa, pero no conozco su directorio. Entonces, lo que quiero es que solo tenga que ingresar el nombre del otro programa, como cuando escribe "cmd" o "winword" en Ejecutar ... abre los programas correspondientes.

Gracias de antemano, Russo

+1

Establecer la ruta completa de la aplicación a la variable de entorno PATH. – anil

+0

@anil: no funciona; la variable de entorno PATH (a pesar de su nombre) suele ser una _list_ de rutas. ¿Cuál de ellos necesitas? – MSalters

+0

Analice la variable PATH y para cada elemento compruebe si el programa existe allí :-) –

Respuesta

7

Está buscando ShellExecute(). Eso incluso funcionará si le pasa una URL adecuada, al igual que el menú Ejecutar.

1

Los directorios de los programas que puede ejecutar desde start -> run se agregan a la variable PATH. Puede agregar la carpeta de su programa a la RUTA y luego usar CreateProcess(). Sin embargo, dices que no conoces el directorio, por lo que probablemente no puedas hacer esto.

¿Conoces un camino parcial? Por ejemplo, ¿sabe que su exe siempre estará en C: \ algo \ algo \ o una subcarpeta de esta ruta? Si es así, busque FindFirst() y FindNext() para enumerar todos los archivos en ese directorio y buscar su exe, luego use CreateProcess() cuando encuentre su exe.

http://msdn.microsoft.com/en-us/library/aa365200%28VS.85%29.aspx muestra cómo enumerar los archivos en un directorio. Tendrá que modificarlo para buscar también subdirectorios (por ejemplo, hacer una función recursiva).

1

Lanzar programas y contar con PATH de cualquier manera se considera una codificación insegura. Las PATH del sistema pueden contaminarse con ubicaciones que no están aseguradas adecuadamente, como una unidad de red. La mejor forma de iniciar una aplicación es ejecutar el ejecutable desde su ubicación exacta y configurar el CWD en la ubicación del ejecutable instalado. De lo contrario, podría estar lanzando código malicioso.

Lo más probable es una combinación de la información de aquí le ayudará a conseguir la ubicación correcta: Detecting installed programs via registry

Greg

Cuestiones relacionadas