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

Проблема

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

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

тогда это происходит

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

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

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

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

до сих пор я выводил

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

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

статус

на данный момент я подозреваю WinRAR, так как я доказал, что код себя завод. Итак, я создаю самоисполняющийся SFX с различными версиями программа WinRar. До сих пор, я пробовал версии:

  • 4.11 x86 с
  • 4.11 х64
  • 4.20b3 x86
  • 4.20b3 x64

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

Я отправил сообщение об ошибке в dev@rarlab.com вчера и получил ответ от Сам Евгений Рошаль!--15--> утром

Привет, Компания 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);
}

который запускает тест.летучая мышь с содержимым как в вашем образце. Эта программа показывает точно такое же поведение, как 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, но это не помогает. Пока что нет. поймите логику этого оконного и настольного режима.

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

доказательство / Доказательства!--15-->

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

image 1

image 2

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

обновление

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

13 ответов


Я думаю, что 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=против 85).aspx Наслаждайтесь!


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

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

start explorer.exe
start explorer
explorer.exe
explorer

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

я обнаружил, что эта строка в пакетном файле действительно работала (после убийства explorer.EXE-файл):

start "" "%windir%\explorer.exe"

, а также другими команды, которые будут выполняться после него в скрипте


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

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

для перезапуска проводника.exe, это сработало для меня.

powershell.exe Stop-Process -processname explorer

попробовать

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

при запуске explorer.exe из 32-разрядного приложения в 64-разрядной windows путь будет перенаправлен в каталог SysWOW64, содержащий 32-разрядный проводник.исполняемый.

в XP64 это было не такое уж большое дело. В taskmanager вы можете увидеть 32-разрядный проводник.exe работает, но он начался как оболочка. В Windows 10 (как я пришел к этой проблеме, похоже, что она введена в Windows 7), 32-разрядный проводник.exe-это заглушка, которая создает новый экземпляр 64-разрядного исследователь.исполняемый. Вероятно, он передает путь в командной строке здесь, чтобы 64-разрядный проводник.exe открывает окно вместо запуска оболочки.

таким образом, как и раньше, вы можете контролировать, должно ли окно или оболочка запускаться при запуске explorer.exe С или без пути в качестве параметра командной строки.

вместо этого вы должны принудительно запустить 64-разрядный проводник.exe из 32-битного приложения, и все в порядке. Для этого один из методов использует каталог sysnative как упоминалось выше. Но другой метод-использовать Wow64disablewow64fsredirection / Wow64RevertWow64FsRedirection.

Я сделал последнее и могу подтвердить, что он работает хорошо. Для обоих CreateProcess и ShellExecuteEx API.


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

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

taskkill /im explorer.exe /f
explorer

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

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

надеюсь, что это помогает!


на днях я просматривал некоторые из более продвинутых опций WinRAR и наткнулся на эту вкладку:

enter image description here

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

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


есть такая же проблема с Visual Studio.

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

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

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

taskkill /im explorer.exe /f

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

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

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


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

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

то, что работало для меня в Windows 7 64 бит "C:\Windows\expstart.исполняемый" или просто экспстарт.exe


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

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App пути\проводник.exe

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

Путь C:\Windows

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


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

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Пути\проводник.исполняемый] @="C:\Windows\explorer.исполняемый" "Путь"="C:\Windows"


Простое Контекстное Меню

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

Screenshot of the configuration