Перезапуск 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-архивы прекрасно сочетаются с пакетными файлами.
Ответы
Ответ 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]()