Shellexecute Problem mit Win7 64bit



  • Hallo,

    von meiner C++-Anwendung heraus (32bit) soll unter Windows7 - 64Bit - eine 64bit-Anwendung gestartet werden. Unter 32bit habe ich dies immer so gemacht:

    void RunApp(String slFileName, String slFileParameter)
    {
    // führt per ShellExecute die Anwendung, die mit der Dateiendung von FileName
    // assoziert ist aus, FileParam spezifiziert zusätzliche Aufrufparameter
    
      int slResuslt = int(ShellExecute(0, "open", (slFileName.t_str()),
    	(slFileParameter.t_str()), 0, SW_SHOWNORMAL));
    
      if(slResuslt <= 32)
      {
    	String slMessage;
        if(slResuslt == ERROR_FILE_NOT_FOUND || slResuslt == SE_ERR_FNF)
          slMessage = "Die angegebene Datei wurde nicht gefunden !";
        else if(slResuslt == ERROR_PATH_NOT_FOUND || slResuslt == SE_ERR_PNF)
          slMessage = "Der Pfad zur Datei wurde nicht gefunden !";
        else if(slResuslt == ERROR_BAD_FORMAT)
    	  slMessage = "Die .EXE Datei ist ungültig oder beschädigt !";
        else if(slResuslt == SE_ERR_ACCESSDENIED || slResuslt == SE_ERR_SHARE)
          slMessage = "Dateizugriff wird vom Betriebssystem verweigert !";
        else if(slResuslt == SE_ERR_ASSOCINCOMPLETE || slResuslt == SE_ERR_NOASSOC)
          slMessage = "Der angegebene Dateityp ist auf Ihrem Computer keiner " +
           String("Anwendung zugeordnet !");
        else
          slMessage = "Datei konnte nicht geöffnet werden !";
    	Application -> MessageBox(slMessage.c_str(), L"Fehler",
    	  MB_OK + MB_ICONEXCLAMATION);
      }
    }
    

    Leider scheint dies beim Aufruf einer 64-bit-Anwendung nicht zu funktionieren, denn dies ergibt immer die Meldung "Die angegebene Datei wurde nicht gefunden !".
    Noch eine kleine Info hierzu: Die zu startende 64bit-exe befindet sich im windows/system32-Ordner. Kopiere ich diese exe in den syswow64-Ordner, dann wird die Datei gestartet (im syswow64 befinden sich ja die 32bit-Anwendungen).
    Der String Filename enthält übrigens nur z.B. "notepad.exe", also ohne den Dateipfad.

    Hat jemand eine Idee, wie ich die 64bit-Anwendung starten kann?
    Danke!



  • "notepad.exe" kann es kaum gewesen sein, da dies in beiden Verzeichnissen existiert...



  • Nein, notepad habe ich nur als File-Beispiel geschrieben. Natürlich heißt die aufzurufende Anwendung anders.



  • Willst Du uns auch noch verraten, was Du genau ausführen willst?
    Du musst bedenken, dass der Pfad aus x64-Sicht geschrieben werden muss...

    Vielleicht hilft auch das Folgende:
    http://stackoverflow.com/questions/3124332/wow64-woes-lnk-shortcuts



  • Ja, dort wird das Problem auch angesprochen, leider auch ohne eine Lösung.
    Ich möchte einfach nur über einen Button meiner C++-Anwendung z.B. ein 64-Bit-Spiel starten. Die Exe hierfür steht im system32-Ordner unter Win7-64. Es spielt hier aber meiner Meinung nach keine Rolle, welche Exe das jetzt ist. Hauptsache, es ist eine 64bit-Anwendung, die gestartet werden soll. Evtl. muss also eine Alternative zu ShellExecute her. ???



  • Kompilier deine eigene Anwendung einfach als 64bit-Anwendung 😉



  • Meine Entwicklungsumgebung befindet sich auf einem 32-bit-System. Kann ich dann eigentlich trotzdem meine Anwendung als 64bit-Anwendung kompilieren?



  • Ja. Natürlich nur, wenn Du die passende VS-version hast (AFAIK min. Professional)



  • Problem gelöst:
    Redirection muss vor Shellexecute deaktiviert und danach wieder aktiviert werden!
    (Wow64EnableWow64FsRedirection)


Anmelden zum Antworten