2016-06-27 7 views
-3

ich eine Datei mit shellexecute Befehl meines Code zu öffnen versuchen, istShellExecute Befehl funktioniert nicht richtig in win10

ShellExecute(NULL,NULL,itemPath,NULL,NULL,SW_SHOW); 

oder

ShellExecute(NULL,L"open",itemPath,NULL,NULL,SW_SHOW); 

ich in beiden Richtungen benutzt habe, aber wenn ich bin geben Pfad eines Ordners Es öffnet einen Ordner, aber wenn ich einen vollständig angegebenen Pfad einer Datei gebe, funktioniert es nicht. eine Sache mehr, wenn ich bin ein hard Pfad wie zum Beispiel

ShellExecute(NULL,L"open",L"E:\\abc.xlsx",NULL,NULL,SW_SHOW); 

als es diese Datei öffnet geben. kann irgendjemand erklären, warum es passiert.

+0

Sie müssen Backslashes in C++, z. 'E: \\ abc.xlsx'. –

+0

Ich habe das benutzt. ShellExecute (NULL, L "offen", L "E: \\ abc.xlsx", NULL, NULL, SW_SHOW); Dieser Befehl läuft perfekt. Das Problem tritt auf, wenn ich den Pfad mit der Variablen passiere. –

+0

Welcher Typ ist * itemPath *? – IInspectable

Antwort

2

ShellExecute funktioniert ordnungsgemäß, und der Fehler kann in Ihrem Code gefunden werden. Die einzige Erklärung, die Sinn macht, ist, dass nicht das ist, was Sie denken, dass es ist. Wenn es sich tatsächlich um einen Zeiger auf null-terminierte Zeichen-Arrays handeln würde, die L"E:\\abc.xlsx" enthalten, dann würde ShellExecute sich wie erwartet verhalten.

Sie können das Problem beheben, indem Sie den Inhalt von itemPath überprüfen, um herauszufinden, was es wirklich enthält. Wenn Sie einen MCVE bereitgestellt hätten, hätten wir bei der Diagnose des Problems genauer sein können.

Schließlich ist ShellExecute veraltet, vor allem weil es keine gute Möglichkeit bietet, Fehlerbedingungen zu melden. Sie sollten stattdessen ShellExecuteEx verwenden.

+0

Ich habe es debuggt. und itempath enthält "E: \ abc.xlsx" und itempath ist eine Variable vom Typ CString –

+0

Wenn 'itemPath == L" E: \\ abc.xlsx "' dann könnte das, was Sie melden, nicht wahr sein. Oder glauben Sie wirklich, dass 'ShellExecute' nicht funktioniert? –

+0

tatsächlich gibt es Bundle Codezeile, so dass ich nicht den ganzen Code anzeigen kann Ich bekomme diesen Pfad aus einer Datei, die verschlüsselt ist, aber nach der Verschlüsselung ist der letzte Wert itempath enthält E: \ abc.xlsx ohne doppelte Backslashes. Derselbe Code funktioniert perfekt in win7. aber in win 10 verhält es sich nicht so wie ich es erwarte. –