Как я могу запустить explorer.exe через C ++? - PullRequest
5 голосов
/ 15 мая 2009

Я пытаюсь программно запустить explorer.exe, но мне не везет.

Это мой код:

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;
}

и pName - это explorer.exe

Может кто-нибудь сказать мне, что я делаю не так? Я получаю код ошибки «2», который ERROR_FILE_NOT_FOUND

Ответы [ 3 ]

4 голосов
/ 15 мая 2009

Первый параметр - это имя приложения; вторая - командная строка. Попробуйте указать «explorer.exe» в качестве второго параметра.

См. Эту статью MSDN :

lpApplicationName [in, необязательно]

Название модуля, который будет выполнен. Этот модуль может быть на базе Windows приложение. Это может быть какой-то другой тип модуля (например, MS-DOS или OS / 2) если соответствующая подсистема доступно на локальном компьютере.

В строке можно указать полный путь и имя файла модуля для выполнения или это может указать частичное имя. В случай частичного имени, Функция использует текущий диск и текущий каталог для завершения Спецификация. Функция не будет используйте путь поиска . Этот параметр должен включать расширение имени файла; расширение по умолчанию не предполагается.

3 голосов
/ 15 мая 2009

Возможно, вам следует попробовать " ShellExecuteEx ". Эта функция позволяет указать файл или папка и глагол , который описывает, что с ним делать. Если вы используете «explore» в качестве глагола , откроется проводник Windows с указанной папкой .

0 голосов
/ 22 декабря 2014

Удивительно сложно найти соответствующую информацию о том, как надежно перезапустить Windows Explorer. В 64-битной Windows 7/8 метод ShellExecute не работает должным образом и приводит к тому, что такие вещи, как копирование файлов и наложения значков, полностью ломаются.

Самый надежный способ - использовать системный вызов stdlib.h:

system("start explorer");

Если вы пытаетесь выключить и перезапустить проводник, вы можете программно отключить раздел реестра AutoRestartShell, который не позволяет управлять при перезапуске проводника.

...