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)