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

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top