FindExecutable()



  • Hallo

    noch ne Frage die die Umstellung von VS2008 auf VS2010 betrifft.
    Möchte aus meiner DLL heraus eine Exe starten.

    Dazu habe ich zunächst die Exe gesucht, die im selben Verzeichnis wie meine DLL liegt.

    CString command = "MyProg.exe"
    TCHAR szExe[MAX_PATH];
    int val = INT_PTR(FindExecutable(command,0, szExe));
    

    Bei VS2008 war dies immer erfolgreich, also ein Wert größer 32. Nun in VS2010 erhalte ich den Wert 2 also SE_ERR_FNF -> The specified file was not found.

    Woran liegt den das nun wieder?



  • Hallo y-vonne,

    eventuell daran:

    CString command = _T("MyProg.exe");
    

    Herzliche Grüsse
    Walter



  • y-vonne schrieb:

    Dazu habe ich zunächst die Exe gesucht, die im selben Verzeichnis wie meine DLL liegt.

    Dafür ist FindExecutable das falsche Werkzeug. Es wundert mich, dass das überhaupt funktioniert hat.

    In der Doku zu FindExecutable steht unter Remarks eine Alternative, die könnte zu dem passen, was du vorhast.



  • Hallo

    Nein eher nicht.

    - Da ich den String command als Übergabe bekomme:

    Also eigentlich so:

    MyFunction(const CString &command)
    TCHAR szExe[MAX_PATH];
    int val = INT_PTR(FindExecutable(command,0, szExe));
    

    - Da ich ein Multibyte-Zeichensatz Projekt habe und da _T keine Auswirkung hat.

    - Da ich es trotzdem getestet habe und es auch nicht geht.

    Gruß



  • Dafür ist FindExecutable das falsche Werkzeug.

    Wieso. Was habe ich da falsch verstanden?



  • y-vonne schrieb:

    Was habe ich da falsch verstanden?

    Keine Ahnung, ich weiß ja nicht, was du gelesen oder gehört hast.

    FindExecutable dient dazu, zu einer Dokumentdatei die damit verknüpfte Anwendung zu finden. Beispielsweise liefert es dir den Pfad zu Word, wenn du es mit einer .doc-Datei aufrufst.



  • Achso ok. Eigentlich brauche ich ja die Funktion FindExceutable oder auch sonst eine Funktion ja nicht. Denn wenn die Exe ja im selben Verzeichnis liegt kann man sie ja einfach so mit CreateProcess starten. Ich wollte halt dass die Exe auch gestartet wird wenn sie mal woanders liegt.

    Welche Funktion wäre hierfür zu verwenden?




  • Mod

    y-vonne schrieb:

    noch ne Frage die die Umstellung von VS2008 auf VS2010 betrifft.
    Möchte aus meiner DLL heraus eine Exe starten.

    Dazu habe ich zunächst die Exe gesucht, die im selben Verzeichnis wie meine DLL liegt.

    CString command = "MyProg.exe"
    TCHAR szExe[MAX_PATH];
    int val = INT_PTR(FindExecutable(command,0, szExe));
    

    Wo die DLL liegt interessiert diesen Code in keiner Weise. Der interessiert sich höchstens für den Pfad der EXE, bzw. das Current Working Directory.

    Wenn Du wirklich im selben Pfad wie die DLL suchen wilst, dann musst Du den Pfad explizit angeben.


Log in to reply