Перезапуск explorer.exe открывает только окно проводника

Проблема

В одной части командного файла (вроде, см. Дополнительная информация) мне нужно перезапустить Проводник, поэтому я использую проверенный метод

taskkill /f /im explorer.exe >nul
explorer.exe

Затем происходит следующее

  1. explorer.exeуспешно завершается
  2. explorer.exeзапускается (см. Изображение 2), но только Откроется окно Проводника, которое я оставляю на неопределенный срок (см. Изображение 1)

. Затем я могу только правильно перезапустить Проводник, запустив новую задачу из Задачи. Диспетчер, как я предполагаю, Win+Rявляется частью проводника.

Дополнительная информация

Теперь я говорю «вроде как», поскольку я запускаю командный файл из самозапускающегося звукового эффекта. архив, созданный с помощью WinRAR. Итак, при выполнении содержимое архива извлекается в %temp%и пользовательский файл (обычно загрузчик и, в в этом случае мой пакетный файл) запускается после успешного извлечения.

На данный момент я пришел к выводу, что

  1. explorer.exeопределенно полностью уничтожается.
  2. Пакетный файл определенно вызывается и выполняется правильно, так как он запускается и все остальное в скрипте работает как задумано, за исключением строки, которая запускает explorer.exe
  3. Команда для перезапуска Проводника не является «несвоевременной» или что-то в этом роде, как я пробовал откладывать.
  4. Пакетный файл отлично работает при ручном извлечении из архива, поэтому это не проблема с процессами сжатия или извлечения.
  5. Даже с такими командами, как start explorer.exe | cmd.exeПроводник не перезапустите правильно, так что это определенно не проблема с файлом .bat.

Я могу подтвердить, что он работает в Windows XP и Windows 7 x86, но не в Windows 7. x64 (это моя система).

Статус

На данный момент я с подозрением отношусь к WinRAR, так как доказал, что сам код работает. Итак, я создаю самоисполняющийся звуковой эффект с разными версиями WinRAR. До сих пор я пробовал версии:

  • 4.11 x86
  • 4.11 x64
  • 4.20b3 x86
  • 4.20b3 x64

и каждый раз получал одинаковые результаты.

Вчера я отправил отчет об ошибке (скрытый) и получил ответ от Сам Евгений Рошальсегодня утром

Здравствуйте, Модуль SFX использует ShellExecuteEx для запуска приложения установки. Обычно это работает хорошо. Я не знаю, почему Explorer решает переключиться в оконный режим. Теперь я создал небольшую автономную программу

#include     
void main()
{
  SHELLEXECUTEINFO si;
  memset(&si,0,sizeof(si));
  si.cbSize=sizeof(si);
  si.lpFile="test.bat";
  si.nShow=SW_SHOWNORMAL;
  ShellExecuteEx(&si);
}

, которая запускает test.bat с содержимым, как в вашем образце. Эта программа показывает точно такое же поведение, как WinRAR SFX, поэтому Explorer запускается в окне.

и второе письмо сегодня утром

Извините, сейчас без советов. Я заменил ShellExecuteEx на CreateProcess

#include 
void main()
{
  STARTUPINFO si;
  PROCESS_INFORMATION pi;
  memset(&si,0,sizeof(si));
  si.cb=sizeof(si);
  CreateProcess(NULL,"test.bat",NULL,NULL,TRUE,0,NULL,NULL,&si,&pi);
}

, но результат тот же. Я пытался использовать другие флаги SW_, например SW_SHOWDEFAULT или SW_RESTORE с ShellExecuteEx также как «открытый» и "исследовать" lpVerb, но это не помогает. На данный момент я не понять логику этого оконного и настольного режимов.

Я понимаю, что перспективы мрачны, но я надеюсь, что это кому-то поможет..

Доказательства / доказательства

Ссылка на архив SFX, демонстрирующий это, если кому-то это нужно: https://dl.dropbox.com/u/27573003/Social%20Distribution/restart-explorer.exe

image 1

image 2

Здесь вы можете заметить, что я запускаю команды внутри виртуальной машины (обозначается VMwareTray.exe), но это не конфликт, вызванный виртуальной машиной. я проверял точно так же файлы в моей собственной хост-системе (это та же ОС) и имели те же Результаты.

Обновление

У меня похожее "работает вне SFX-архива, но не из него" проблемы при использовании REG ADDв совершенно другом проекте. Я просто не думаю, что архивы SFX хорошо работают с пакетными файлами.

23
задан 36 revs, 3 users 74% 2 July 2015 в 15:31
поделиться