Pfad einer Datei herrausfinden
-
Hallo,
Ich habe da ein Problem.Ich kann in meinem Code über CreateProcess( ....., "meinedatei.exe", ....) (windows api) eine Andwendung starten.
Soo, Problem ist, dieses Programm bekommt die Arbeitsumgebung des Programmes das es ausführt (Windows Dienst) welcher die Arbeitsumgebung .../system32 hat.
Ich würde aber gerne das "meinedatei.exe" als Arbeitsumgebung das Verzeichniss bekommt in dem "meinedatei.exe" liegt!
bevor Fragen kommen, ja der Code funktioniert, die Datei lässt lässt sich starten, alles geht einwandfrei, bis auf das oben beschriebene.
der Sache ist, die .exe des Dienstes und die andere .exe sind in C:\irgendwas
Trodsdem bekommt der Dienst immer das Arbeitsverzeichniss \system32, kann aber trodsdem per simplem "meinedatei.exe" diese Datei starten (also ohne absolute pfadangabe), obwohl diese garnicht in system32 liegt....

egal, bevor ich euch weiter verwirre:
Ich kann also auf eine Datei zugreifen, wie bekomme ich deren Pfad?In meine Träumen irgendwie so:
string pfad = getDir( meine.exe )
// pfad: "C:\Ordner\Meine.exe"Bitte nur Code posten der mit normalem standard C++ geht, also kein Borland kappes bitte
mfg,
Pad01
-
was ist kappes?
und mit standard C++ gehts nicht.
simon
-
Kappes ist Weißkohl und steht im Westfälischen, Rheinländischen etc. für Blödsinn
-
Gibt es dafür keine funktion von Windows die ich benutzen kann?
Das kann ich mir irgendwie kaum vorstellen das das nicht gehen soll.
Gibt es denn wenigstens die möglichkeit das mir das Programm sagt, wie sein eigener absoluter Pfad ist? (Also nicht die Arbeitsumgebung die man mit _getcwd( NULL, 0 ) bekommen würde.)
-
GetModuleFileName(...)
Is aber MFC/WinAPI - Kappes
-
Kein Problem

Das habe ich nur geschrieben weil ich hin und wieder zu einem Problem nur Lösungen finde die irgendwelche Borland Dateien vorraussetzten, da ich Borland aber nicht habe, hilft mir das natürlich nicht weiter, deswegen der Hinweis.Gegen Win API hab ich überhaupt nichts, aber das hab ich auch geschrieben

GetModuleFileName geht übrigens wunderbar
#include Winbase.h
#include Windows.hTCHAR pfad[MAX_PATH];
GetModuleFileName( NULL, pfad, MAX_PATH );
string strPfad = pfad;cout << "Hier kommt der Pfad: " << strPfad << endl;
EDIT: Habs etwas erweitert, vieleicht hilft das ja irgendwann mal irgendjemanden da draußen:
#include Winbase.h
#include Windows.hchar pfadMitDateiName[ MAX_PATH ] = "";
GetModuleFileName( NULL, pfadMitDateiName, MAX_PATH );
zumEditieren = pfadMitDateiName;
int index;
index = ( int )zumEditieren.rfind( "\", zumEditieren.length( ) );zumEditieren.erase( index, zumEditieren.length( ) );
char * meinPfad = const_cast< char* > ( zumEditieren.c_str( ) );
SetCurrentDirectory( meinPfad );
Mit SetCurrentDirectory kann man den Arbeitspfad des Programms ändern
-
Ev. kannst du dir auch noch boost::filesystem anschauen. Passt glaube nicht 100% zu deinem Problem, aber ein Blick ist es alle mal Wert.
