Wie kann man den Pfad zu einer EXE in der EXE selbst ermitteln?
-
Hallo,
kann mir jemand helfen? Ich habe eine EXE geschrieben, die während der Ausführung ermitteln muss, an welchem Ort sie sich befindet (also die EXE als Datei). Sie wird von einem anderen Ort aus gestartet, hat also ein anderes Ausführungsverzeichnis. Der Ort der EXE soll nicht beim Start als Parameter mit übergeben werden.
Hat jemand sowas schon mal getan?Danke, Grüße Marco
-
GetModuleFilename
-
probier mal dies:
#include <stdio.h> void main (int i, char **p) { printf ("ich bin hier: %s\n", *p); }
-
Ich weiß nicht, ob dort der komplette Pfad landet, aber in argv[0] steht zumindest der Programmname (wäre auf jeden Fall einen Versuch wert).
Außerdem gibt es afaik eine WinAPI-Funktion, die den Namen und Pfad der EXE zurückgeben kann (weiß leider nicht mehr, wie die heißt).
Edit @net: "void main()"? Dafür gehörst du eigentlich erschossen

-
CStoll schrieb:
Edit @net: "void main()"? Dafür gehörst du eigentlich erschossen

darum geht's doch hier gar nicht

-
irgendwie könnte man daraus mal ne faq machen. Grundsätzlich kommt bei der Frage jemand mit der argv[0]-Lösung. Das funktioniert nicht.
-
In argv[0] steht der Name mit dem kompletten Pfad. Danke für die Antworten!
-
nein, da steht drin, wie man das Programm aufgerufen hat. Kannst ja mal cmd.exe öffnen, in das Verzeichnis wechseln und dann das Programm ohne kompletten Pfad starten.
-
DrGreenthumb schrieb:
Kannst ja mal cmd.exe öffnen, in das Verzeichnis wechseln und dann das Programm ohne kompletten Pfad starten.
du hast recht

so ein mist
-
Jo, stimmt. Aber das reicht mir schon. Danke!
-
Hiermit sollte es auch klappen, hast auch noch den Anwendungsnamen mit drin:
#include "boost/filesystem/operations.hpp" #include "boost/filesystem/fstream.hpp" namespace fs = boost::filesystem; cout << fs::system_complete(fs::path(argv[0], fs::native)).string();Edit: Ich vergaß, mit branch_path() lässt sich der auch nur der Pfad ermitteln:
fs::system_complete(fs::path(argv[0], fs::native)).branch_path().string();