Pfad eines Programs herausfinden



  • Vielen Dank für deine Antwort, das suchen dauert ja bekanntlich sehr lang. Ich könnte die Standardpfade überprüfen und wenn ich diese nicht finde soll es der Benutzer selbst angeben beim öffnen des Programs.

    Was haltet ihr von dieser Idee?



  • Ich könnte die Standardpfade überprüfen und wenn ich diese nicht finde soll es der Benutzer selbst angeben beim öffnen des Programs.

    Genau so würde ichs machen. Wenn der Benutzer das Programm nicht dorthin tut wo du es erwartest muss er halt festlegen wo es ist. 😃
    Alternativ kannst du ja auch eine (optionale) automatische Suche anbieten falls das Programm nicht im Standardpfad liegt, aber ich würde das einfach den User machen lassen.



  • Danke für die Antwort.

    Es gibt ja so "Variablen" für Pfade wie "C:\Program Files (x86)\" wie ist denn das Schlagwort dafür?



  • Die heißen Umgebungsvariablen.
    Auslesen geht z.B. so:

    #include <cstdlib>
    #include <string>
    std::string getEnvironmentVariable(std::string name)
    {
    	char* temp = getenv(name.c_str());
    	if(temp != NULL)
    		return temp;
    	return "";
    }
    
    int main()
    {
    	std:string programs = getEnvironmentVariable("PROGRAMFILES");
    	return 0;
    }
    


  • Vielen Dank für deine Antwort,

    kann ich getenv ohne bedenken benutzen oder sollte ich lieber auf die umständliche Variante der sicheren Funktionen zurückgreifen.



  • Welche "sicherere" Variante meinst du denn ?
    Wenn du die Funktion so benutzt kann nicht viel passieren, du musst nur auf Null-Pointer aufpassen (hab ich ja schon eingebaut) und darfst weder in den zurückgegebenen String schreiben, noch ihn versuchen freizugeben.
    Deshalb ja die Kopie als std::string.



  • Hallo,

    du kannst die laufenden Prozesse iterieren und Dir Informationen
    über diese beschaffen, da ist auch der Programpath enthalten.

    Das geht freilich nur wenn der Prozess bereits abläuft.

    PseudoCode! :

    PROCESSENTRY32 process;process.dwSize=sizeof(PROCESSENTRY32);
    
    	HANDLE handle(CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0));
    	if(!handle)
    	 return -1;
    
    	Process32First(handle,&process);
    	do
    	{
    		//(process.szExeFile,pAppName,strlen(pAppName)))
    	   _tprintf(L"PID(0x%x) NAME(%s)\r\n",process.th32ProcessID, &process.szExeFile[0]);
    	}while(Process32Next(handle,&process));
    

  • Mod

    Dafür gibt es
    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\App Paths



  • Hallo Martin Richter,

    in diesem Ordner finde ich nur svn, sonst ist da nichts drinn.


  • Mod

    Dann schaust Du falsch nach.
    In diesem Verzeichnis ist jedes Setup Programm gehalten den Pfad der primären EXE einzutragen. Siehe MSDN.


Anmelden zum Antworten