Как запустить explorer.exe через C++?
-
21-08-2019 - |
Вопрос
Я пытаюсь программно запустить 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, который не позволяет вам контролировать когда проводник перезапускается.