Вопрос

Я пытаюсь программно запустить 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

Это было полезно?

Решение

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

Видеть это Статья MSDN:

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

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

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

Другие советы

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

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

Наиболее надежным способом является использование системного вызова stdlib.h:

system("start explorer");

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top