Проблема
В одной части командного файла (вроде, см. Дополнительная информация) мне нужно перезапустить Проводник, поэтому я использую проверенный метод
taskkill /f /im explorer.exe >nul
explorer.exe
Затем происходит следующее
explorer.exe
успешно завершаетсяexplorer.exe
запускается (см. Изображение 2), но только
Откроется окно Проводника, которое я оставляю на неопределенный срок (см. Изображение 1) . Затем я могу только правильно перезапустить Проводник, запустив новую задачу из Задачи.
Диспетчер, как я предполагаю, Win+R
является частью проводника.
Дополнительная информация
Теперь я говорю «вроде как», поскольку я запускаю командный файл из самозапускающегося звукового эффекта.
архив, созданный с помощью WinRAR. Итак, при выполнении содержимое архива
извлекается в %temp%
и пользовательский файл (обычно загрузчик и, в
в этом случае мой пакетный файл) запускается после успешного извлечения.
На данный момент я пришел к выводу, что
explorer.exe
определенно полностью уничтожается.explorer.exe
start explorer.exe | cmd.exe
Проводник не
перезапустите правильно, так что это определенно не проблема с файлом .bat
.Я могу подтвердить, что он работает в Windows XP и Windows 7 x86, но не в Windows 7. x64 (это моя система).
Статус
На данный момент я с подозрением отношусь к WinRAR, так как доказал, что сам код работает. Итак, я создаю самоисполняющийся звуковой эффект с разными версиями WinRAR. До сих пор я пробовал версии:
и каждый раз получал одинаковые результаты.
Вчера я отправил отчет об ошибке (скрытый) и получил ответ от Сам Евгений Рошальсегодня утром
Здравствуйте, Модуль 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
Здесь вы можете заметить, что я запускаю команды внутри виртуальной машины (обозначается
VMwareTray.exe
), но это не конфликт, вызванный виртуальной машиной. я проверял точно так же
файлы в моей собственной хост-системе (это та же ОС) и имели те же
Результаты.
Обновление
У меня похожее "работает вне SFX-архива, но не из него"
проблемы при использовании REG ADD
в совершенно другом проекте.
Я просто не думаю, что архивы SFX хорошо работают с пакетными файлами.