Перезапуск проводника.exe открывает только окно Проводника
Проблема
в одной части пакетного файла (вид, см. дополнительную информацию) мне нужно перезапустить Explorer, поэтому я использую проверенный метод
taskkill /f /im explorer.exe >nul
explorer.exe
тогда это происходит
-
explorer.exe
успешно расторгнут -
explorer.exe
запускается (см. Изображение 2), но только Откроется окно Проводника, которое я оставляю на неопределенный срок (см. Рисунок 1)
Я могу тогда только правильно перезапустите Explorer, запустив новую задачу из задачи
Менеджер, как, я полагаю,Win + R
является частью Explorer.
Дополнительная Информация
теперь я говорю "вроде" , поскольку я запускаю пакетный файл из самоисполняющегося SFX
архив, созданный с помощью WinRAR. Таким образом, при выполнении содержимое архива
извлечено в %temp%
и определяемый пользователем файл (обычно boot-strapper и, в
этот случай, мой пакетный файл) запускается после успешного добыча.
до сих пор я выводил
-
explorer.exe
определенно полностью убивают. - пакетный файл точно называется и выполняется правильно, так как он работает и
все остальное в скрипте работает так, как задумано, за исключением строки, которая
начинается
explorer.exe
- команда перезапуска Explorer не "плохо синхронизирована" или что-то еще, как я попробовал отложить.
- пакетный файл отлично работает при ручном извлечении из архив, так что это не проблема с процессами сжатия или извлечения.
- даже с такими командами, как
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
здесь вы можете заметить, что я запускаю команды внутри виртуальной машины (как обозначено
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"
, а также другими команды, которые будут выполняться после него в скрипте
для перезапуска проводника.exe, это сработало для меня.
powershell.exe Stop-Process -processname explorer
при запуске 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 и наткнулся на эту вкладку:
Как только я увидел, что я подозревал, что это часть проблемы и решения, так как эта проблема возникает только в 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. Наслаждайтесь!