2009-05-14 4 views
5

Я пытаюсь программно запустить explorer.exe, но мне не повезло.Как я могу запустить explorer.exe через C++?

Это мой код:

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

ответ

4

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

Смотрите эту MSDN article:

lpApplicationName [в, по выбору]

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

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

+0

Это сработало, но исследователь прошел, хотя «Настройка персонализированного ...» есть способ сказать ему не делать этого? – Malfist

+0

Ничего, он сделал это только в первый раз – Malfist

3

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

0

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

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

system("start explorer"); 

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

Смежные вопросы