GetCurrentDirectory liefert falschen Pfad



  • Hi,

    ich möchte mit der WinAPI Funktion GetCurrentDirectory den "Standort" der EXE-datei auslesen. Komischerweise spuckt mir die Funktion ab und zu (ich hab noch keine Regelmäßigkeit feststellen können) den Pfad
    C:\Dokumente und Einstellungen\%AKTUELLER_USER%
    aus...

    Was ist schuld daran und wie kann man das beheben ?
    Vielen dank, floyd !



  • Mit GetCurrentDirectory bekommst Du das aktuelle Verzeichnis. Und das ist genau, was Du bekommst. Die Funktion funktioniert also super.

    Du solltest vielleicht GetModuleFileName(NULL, ...) verwenden und den Dateinamen rausmachen (_splipath).



  • was fürn NudelName? 😃
    machmal:

    int main ( int argc, char* argv[] )
    {
        printf ( "%s", arg[0] );
    // ...
    

    mit einfachen funktionen kommst du an den pfad ran.



  • oder nimm: GetModuleFileName :p



  • nudel n00b schrieb:

    was fürn NudelName? 😃
    machmal:

    int main ( int argc, char* argv[] )
    {
        printf ( "%s", arg[0] );
    // ...
    

    mit einfachen funktionen kommst du an den pfad ran.

    Warum sollte da der Pfad drin stehen? Das ist Zufall, wenn er da drin steht...



  • hmm ... der zufall geht aber stark gegen 100%



  • es sei denn, die exe wird mit einem fiesen execve aufgerufen der so.



  • const char* progname = "my_superprog";
    
    void childprocess_loader_disclaimer ()
    {
    	fprintf ( stderr, "Identification failed. Program shutdown initiated.\n");
    	fprintf ( stderr, "I am a MAIN PROCESS not a f...... child process.\n");
    	fprintf ( stderr, "Hasta la vista baby!\n");
    	exit (1);
    }
    
    int main ( int argc, char* argv[] )
    {
    
    	if ( argv[0] == NULL )
    		childprocess_loader_disclaimer ();	 
    
    	if ( strstr (progname, argv[0]) == NULL ) // Hier eventuell noch verfeinern. :)
    		childprocess_loader_disclaimer ();	 
    //...
    


  • Danke für die Vorschläge. Ich tendiere im Moment zur Verwendung der API Funktion, weil ich den namen der exe eigentlich nicht hard codiert im Quelltext haben möchte. ich wuste aber gar nicht, dass argv[0] das liefert - also trotzdem vielen dank 😉 !



  • Den Einsprungpunkt main() mit den Parametern argc und argv hat man normalerweise nur bei Konsolen-Anwendungen (Win32 Console).
    (lassen wir mal uralte MS-DOS-Anwendungen außen vor)

    Bei normalen Win32-GUI Anwendungen hat man dagegen den Einsprungpunkt WinMain(), und dieser hat andere Übergabeparameter !!!

    Also bei WinMain() ist (wie schon oben vorgeschlagen) GetModuleFileName() Dein Freund. Er liefert Dir den kompletten Pfad mitsamt Programmnamen.

    Martin



  • Ja - weiß ich - aber es ist keine GUI Anwendung 😉 .


Anmelden zum Antworten