Подтвердить что ты не робот

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

Проблема

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

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

Тогда это произойдет

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

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

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

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

До сих пор я вывел

  • explorer.exe определенно полностью убит.
  • Пакетный файл определенно вызывается и выполняется правильно, поскольку он запускается и все остальное в script работает так, как было разработано, за исключением строки, которая начинает explorer.exe
  • Команда перезапуска проводника не является "плохо синхронизирована" или что-то еще, поскольку я попробовал отложить его.
  • Пакетный файл отлично работает при извлечении вручную из архива, поэтому это не проблема с процессами сжатия или извлечения.
  • Даже с такими командами, как start explorer.exe | cmd.exe Explorer не перезагрузитесь должным образом, так что это определенно не проблема с файлом .bat.

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

Статус

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

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

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

Вчера я отправил сообщение об ошибке на [email protected], а получил ответ от Сам Евгений Рошаль сегодня утром

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

#include <windows.h>    
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 <windows.h>
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), но это не конфликт, вызванный VM. Я тестировал то же самое файлы на моей собственной хост-системе (которая является той же ОС) и имеют одинаковые Результаты.

Обновление

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

4b9b3361

Ответ 1

На днях я просмотрел некоторые дополнительные параметры WinRAR и наткнулся на эту вкладку:

enter image description here

Как только я увидел, что я подозреваю, что это часть проблемы и решения, поскольку эта проблема возникает только в Windows 7 x64.

Как и предполагалось, использование модуля Default64.SFX вместо стандартного модуля Default.SFX полностью устранило проблему. Наконец-то.

Ответ 2

Я думаю, что user1631170 что-то говорит: "Интересно, работает ли какая-то часть Win-RAR в 32-битном режиме? Можете ли вы даже запустить explorer64 из 32-битного процесса? Я вполне уверен, что Windows выиграла ' т."

Когда я запускаю explorer.exe из ProcessHacker (32-разрядный диспетчер процессов), я получаю окно проводника.

Но я могу заставить его запустить 64-разрядный проводник с помощью этого:

%systemroot%\sysnative\cmd.exe /c start /B explorer.exe

sysnative - это ключевое слово, которое Windows распознает для обхода перенаправления файловой системы для 32-разрядной/64-разрядной (http://msdn.microsoft.com/en-us/library/windows/desktop/aa384187(v=vs .85).aspx Наслаждайтесь!

Ответ 3

Это работает в Windows 7:

taskkill /f /IM explorer.exe
start explorer.exe
exit

Ответ 4

У меня была эта же проблема и выяснилось, что все решения здесь все еще не работают из пакета script.

Ни один из них не работал полностью:

start explorer.exe
start explorer
explorer.exe
explorer

потому что все они либо открыли окно (и не отобразили панель задач снова), либо пакет script, а затем повесили после этого и больше не могли выполнять команды

Я обнаружил, что эта строка в пакетном файле работает (после убийства explorer.exe):

start "" "C:\Windows\explorer.exe"

а также разрешить выполнение других команд после него в script

Ответ 5

Для перезапуска explorer.exe это сработало для меня.

powershell.exe Stop-Process -processname explorer

Ответ 6

Try

%windir%\explorer.exe
start %windir%\explorer.exe
start /d%windir% explorer.exe

Ответ 7

Я видел подобные проблемы, прежде чем делать это на С#. Этот процесс должен был быть вызван вызовом оболочки explorer, а не окном проводника, но у меня не было проблем в пакетной версии.

Попробуйте использовать это:

taskkill /im explorer.exe /f
explorer

Разница между другими ответами explorer, а не explorer.exe, которая вызвала проблемы раньше для меня.

Это работает на моем компьютере Win7 x64.

Надеюсь, это поможет!

Ответ 8

Иметь такую ​​же проблему с Visual Studio.

Что работает для меня (Win 7 Pro 64bit):

PPM по названию проекта выберите "Свойства"

Свойства конфигурации > События сборки > Событие предварительной сборки

taskkill /im explorer.exe /f

Свойства конфигурации > События сборки > Событие после сборки

start "" "C:\Windows\explorer.exe"

Но это создает другую проблему (среда IDE заморожена после запуска проводника), и теперь я могу только перезапустить среду IDE, чтобы снова запустить команду сборки...

Ответ 9

Используйте это (.bat с правами администратора) в x64 или x86

tasklist /fi "imagename eq explorer*" | find /i "explorer*"
if not errorlevel 1 (taskkill /f /im "explorer*") else (
start %windir%\explorer.exe

Ответ 10

Что работало для меня в 64-разрядной версии Windows 7 "C:\Windows\expstart.exe" или просто expstart.exe

Ответ 11

Попробуйте добавить ключ explorer.exe к путям приложений в реестре.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Пути приложений \explorer.exe

(по умолчанию) C:\Windows\explorer.exe

Путь C:\Windows

или скопируйте в блокнот и сохраните его как .reg файл, затем запустите его:


Редактор реестра Windows версии 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Пути приложений \explorer.exe] @= "C:\Windows\explorer.exe" "Путь" = "C:\Windows"

Ответ 12

Легкое контекстное меню

Просто щелкните правой кнопкой мыши на рабочем столе и выберите Перезапустить проводник Windows. Наслаждайтесь!

Screenshot of the configuration