Pregunta

En Windows, se puede ir a "Ejecutar", escribe "cmd", pulse enter, y puesta en marcha de "C: \ Windows \ system32 \ cmd.exe" con bastante facilidad. Lo mismo es cierto para "pitón" o "pythonw" (aunque no aparece en el segundo ejemplo). Si todo lo que sabe es que se desea ejecutar "pitón" o "pythonw" y que está en el camino, ¿cuál es la manera más simple en C para averiguar el nombre de ruta completo para el ejecutable? Esta pregunta parece estar muy relacionada con el problema, pero no da una solución definitiva en C. _ execp permite el uso de la cadena 'pitón' o 'pythonw' pero requiere la trayectoria calificado para el primer argumento para el parámetro argv de la función.

¿Fue útil?

Solución

Para consultar todas las API de shell PathResolve (que, sin embargo, se marca como 'extraíble en cualquier versión de windows futuras', así que me gustaría evitarlo) y PathFindOnPath , que, en cambio, es una API estable. Con PathFindOnPath, pasar el nombre de archivo para buscar (por ejemplo yourexecutable.exe) como el primer parámetro y NULL como el segundo.

Otros consejos

Uso getenv () para obtener la ruta, dividirlo en cadenas (por punto y coma en Windows), entonces prueba si existe un ejecutable con el nombre especificado en cada directorio a su vez.

#include <iostream>
#include <sstream>
#include <sys/stat.h>

int main(void)
{
    std::stringstream path(getenv("PATH"));
    while (! path.eof())
    {
        std::string test;
        struct stat info;
        getline(path, test, ':');
        test.append("/myfile");
        if (stat(test.c_str(), &info) == 0)
        {
            std::cout << "Found " << test << std::endl;
        }
    }
}

Reemplazar mi_archivo con lo que sea, y en Windows reemplazar ':' con ';' ya que el separador de ruta es diferente.

Puede utilizar PathFindOnPath () , y pasar NULL para el segundo valor para buscar la variable de entorno PATH actual.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top