Wie kann ich explorer.exe über C ++ starten?
-
21-08-2019 - |
Frage
Ich versuche, programmatisch zu starten explorer.exe aber ich habe kein Glück.
Dies ist mein Code:
cout << pName << "died, lets restart it." << endl;
STARTUPINFO startupInfo = {0};
startupInfo.cb = sizeof(startupInfo);
PROCESS_INFORMATION processInformation;
if(CreateProcess(pName, NULL, NULL, NULL, false, NORMAL_PRIORITY_CLASS, NULL, NULL, &startupInfo, &processInformation) == 0){
cout << "Error starting " << pName << ": " << GetLastError() << endl;
}
und pName ist explorer.exe
Kann mir jemand sagen, was ich falsch mache? Ich erhalte den Fehlercode ‚2‘, die ERROR_FILE_NOT_FOUND
ist
Lösung
Der erste Parameter ist der Name der Anwendung; die zweite ist die Befehlszeile. Versuchen Sie "explorer.exe" als zweiten Parameter angeben.
Sehen Sie diesen MSDN-Artikel :
lpApplicationName [in, optional]
Der Name des Moduls ausgeführt werden. Dieses Modul kann ein Windows-basierte sein Anwendung. Es kann ein anderer Typ sein des Moduls (beispielsweise MS-DOS oder OS / 2), wenn das entsprechende Teilsystem auf dem lokalen Computer.
Die Zeichenfolge kann den vollständigen Pfad angeben und der Dateiname des Moduls auszuführen oder es kann ein Teil des Namens angeben. Im Der Fall von einem Teil des Namens, der Funktion verwendet das aktuelle Laufwerk und aktuelles Verzeichnis vervollständigen die Spezifikation. Die Funktion wird nicht verwenden Sie den Suchpfad . Dieser Parameter muss die Dateinamenerweiterung enthalten; keine Standarderweiterung wird angenommen.
Andere Tipps
Sie sollten wahrscheinlich geben „ ShellExecuteEx " ein Versuch. Mit dieser Funktion können Sie festlegen, eine Datei oder Ordner und Verb , das, was damit zu tun, beschreibt. Wenn Sie "explore
", wie der Verb , öffnet es Windows Explorer mit dem angegebenen Ordner .
Es ist erstaunlich schwer relevante Informationen, wie Sie auf zuverlässig restart Windows Explorer zu finden. Auf 64-Bit-Windows-7/8, wird die ShellExecute Methode nicht richtig funktionieren und führt zu Dingen wie das Kopieren von Dateien und Icon-Overlays völlig gebrochen zu sein.
Der zuverlässigste Weg scheint Systemaufruf zu verwenden stdlib.h:
system("start explorer");
Wenn Sie Herunterfahren und Neustarten Explorer versuchen, möchten Sie vielleicht programmatisch AutoRestartShell Registrierungsschlüssel deaktivieren, die Sie aus dem Controlling verhindert , wenn Explorer neu gestartet wird.