windows - reiniciar - El reinicio de explorer.exe solo abre una ventana del explorador
reiniciar explorer.exe windows 10 (13)
El problema
En una parte de un archivo por lotes (tipo de, consulte Información adicional) necesito reiniciar Explorer, así que uso el método probado y comprobado de
taskkill /f /im explorer.exe >nul
explorer.exe
Entonces esto sucede
-
explorer.exe
ha finalizado correctamente - Se inicia
explorer.exe
(vea la Imagen 2), pero solo se abre una ventana del Explorador, que me queda por tiempo indefinido (vea la Imagen 1)
Entonces, solo puedo reiniciar correctamente el Explorador iniciando una nueva tarea desde el Administrador de tareas, ya que, supongo, Win + R
es parte del Explorador.
Información extra
Ahora, digo "tipo de" ya que estoy ejecutando el archivo por lotes desde un archivo SFX de ejecución automática, creado con WinRAR. Por lo tanto, cuando se ejecuta, el contenido del archivo comprimido se extrae a %temp%
y se ejecuta un archivo definido por el usuario (generalmente un boot-strapper y, en este caso, mi archivo por lotes) luego de una extracción exitosa.
Hasta ahora, he deducido
-
explorer.exe
definitivamente está siendo completamente eliminado. - El archivo por lotes definitivamente se llama y ejecuta correctamente, ya que se ejecuta y todo lo demás en el script funciona según lo diseñado, excepto por la línea que inicia
explorer.exe
- El comando para reiniciar Explorer no está "mal programado", o algo así, ya que he intentado retrasarlo.
- El archivo por lotes funciona perfectamente cuando se extrae manualmente del archivo, por lo que no es un problema con los procesos de compresión o extracción.
- Incluso con comandos como
start explorer.exe | cmd.exe
start explorer.exe | cmd.exe
Explorer no se reinicia correctamente, por lo que definitivamente no es un problema con el archivo.bat
.
Puedo confirmar que funciona en Windows XP y Windows 7 x86 pero no en Windows 7 x64 (que es mi sistema).
Estado
En este momento, desconfío de WinRAR, ya que he probado que el código en sí funciona. Entonces, estoy creando el SFX autoejecutable con diferentes versiones de WinRAR. Hasta ahora, he probado versiones:
- 4.11 x86
- 4.11 x64
- 4.20b3 x86
- 4.20b3 x64
Y tenía los mismos resultados cada vez.
Ayer presenté un informe de error a [email protected] y recibí una respuesta del propio Eugene Roshal esta mañana.
Hola, el módulo SFX usa ShellExecuteEx para iniciar una aplicación de configuración. Normalmente funciona bien. No sé por qué Explorer decide cambiar al modo de ventana. Ahora construí un pequeño programa independiente
#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);
}
que ejecuta test.bat con contenidos como en su muestra. Este programa muestra exactamente el mismo comportamiento que WinRAR SFX, por lo que Explorer se inicia en la ventana.
y un segundo correo esta mañana
Lo siento, no hay consejos ahora. Reemplacé ShellExecuteEx con 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);
}
pero el resultado es el mismo. Intenté usar otros indicadores SW_ como SW_SHOWDEFAULT o SW_RESTORE con ShellExecuteEx también como "abrir" y "explorar" lpVerb, pero no ayuda. Por ahora no entiendo la lógica detrás de este modo de ventana frente a escritorio.
Me doy cuenta de que la perspectiva es sombría, pero espero que sea de ayuda para alguien ...
Prueba / Evidencia
Enlace a un archivo SFX demostrando esto, si alguien lo quiere: https://dl.dropbox.com/u/27573003/Social%20Distribution/restart-explorer.exe
Puede notar aquí que estoy ejecutando los comandos dentro de una VM (como se indica por VMwareTray.exe
) pero no es un conflicto causado por la VM. He probado exactamente los mismos archivos en mi propio sistema host (que es el mismo sistema operativo) y he tenido los mismos resultados.
Actualizar
Estoy experimentando problemas similares "al margen de un archivo SFX pero no de uno" al usar REG ADD
en un proyecto completamente diferente. Simplemente no creo que los archivos SFX jueguen bien con los archivos por lotes.
Creo que el usuario 1631170 está en algo, "me pregunto si alguna parte de Win-RAR se ejecuta en modo de 32 bits. ¿Podría siquiera iniciar el explorer64 ejecutando desde un proceso de 32 bits? Estoy bastante seguro de que Windows no hará eso . "
Cuando inicio explorer.exe desde ProcessHacker (administrador de procesos de 32 bits), aparece una ventana del explorador.
Pero puedo forzarlo para iniciar el explorador de 64 bits con esto:
%systemroot%/sysnative/cmd.exe /c start /B explorer.exe
sysnative es una palabra clave que Windows reconoce para omitir la redirección del sistema de archivos para 32 bits / 64 bits ( http://msdn.microsoft.com/en-us/library/windows/desktop/aa384187(v=vs.85).aspx Disfruta!
Cuando ejecuta explorer.exe desde una aplicación de 32 bits en ventanas de 64 bits, la ruta se redireccionará al directorio SysWOW64 que contiene el explorer.exe de 32 bits.
En XP64 no fue tan importante. En el administrador de tareas puede ver el explorer.exe de 32 bits en ejecución, pero comenzó como el shell. En Windows 10 (como llegué a este problema, parece que se introdujo en Windows 7), el explorer.exe de 32 bits es un código auxiliar que crea una nueva instancia del explorer.exe de 64 bits. Probablemente pasa una ruta en la línea de comandos aquí, por lo que el explorer.exe de 64 bits abre una ventana en lugar de iniciar el shell.
Así que todavía es como antes, puede controlar si una ventana o un shell deben iniciarse iniciando explorer.exe con o sin una ruta como parámetro de línea de comandos.
En su lugar, debe forzar el inicio del explorer.exe de 64 bits desde la aplicación de 32 bits y todo está bien. Para hacer esto, un método es usar el directorio sysnative como se mencionó anteriormente. Pero otro método es usar Wow64DisableWow64FsRedirection / Wow64RevertWow64FsRedirection.
Hice lo último y puedo confirmar que funciona muy bien. Tanto para CreateProcess como para ShellExecuteEx API.
El otro día, estaba revisando algunas de las opciones más avanzadas de WinRAR y encontré esta pestaña:
Tan pronto como vi, sospeché que era parte del problema y la solución, ya que este problema solo ocurre en Windows 7 x64.
Como se sospechaba, el uso del módulo Default64.SFX
lugar del módulo predeterminado Default.SFX
solucionó el problema por completo. Finalmente.
Esto funciona en Windows 7:
taskkill /f /IM explorer.exe
start explorer.exe
exit
He visto problemas similares antes de hacer esto en C #. El proceso tuvo que ser invocado llamando al shell del explorador en lugar de a la ventana del explorador, pero no he tenido ningún problema en el lote.
Intenta usar esto:
taskkill /im explorer.exe /f
explorer
La diferencia entre las otras respuestas es que son explorer
lugar de explorer.exe
que me ha causado problemas antes.
Esto funciona en mi PC Win7 x64.
¡Espero que esto ayude!
Intente agregar una clave explorer.exe a las rutas de la aplicación en el registro.
HKEY_LOCAL_MACHINE / SOFTWARE / Microsoft / Windows / CurrentVersion / App Paths / explorer.exe
(Predeterminado) C: / Windows / explorer.exe
Ruta C: / Windows
o copie lo siguiente en el bloc de notas y guárdelo como un archivo .reg luego ejecútelo:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE / SOFTWARE / Microsoft / Windows / CurrentVersion / App Paths / explorer.exe] @ = "C: / Windows / explorer.exe" "Ruta" = "C: / Windows"
Lo que funcionó para mí en Windows 7 de 64 bits fue "C: / Windows / expstart.exe" o simplemente expstart.exe
Para reiniciar explorer.exe, esto funcionó para mí.
powershell.exe Stop-Process -processname explorer
Tiene el mismo problema con Visual Studio.
Lo que me funciona (Win 7 Pro 64bit):
PPM en el nombre del proyecto seleccione "Propiedades"
Propiedades de configuración> Eventos de compilación> Evento de precompilación
taskkill /im explorer.exe /f
Propiedades de configuración> Eventos de compilación> Evento posterior a la compilación
start "" "C:/Windows/explorer.exe"
Pero esto crea otro problema (el IDE se congela después de que se ejecuta el explorador) y ahora solo puedo reiniciar el IDE para ejecutar el comando de compilación nuevamente ...
Tratar
%windir%/explorer.exe
start %windir%/explorer.exe
start /d%windir% explorer.exe
Tuve este mismo problema y encontré que todas las soluciones aquí todavía no funcionaban desde un script por lotes.
Ninguno de estos funcionó completamente:
start explorer.exe
start explorer
explorer.exe
explorer
porque todos abrieron una ventana (y no volvieron a mostrar la barra de tareas), o la secuencia de comandos del lote se colgó posteriormente y no pudo ejecutar más comandos
Encontré que esta línea en el archivo por lotes funcionó (después de matar explorer.exe):
start "" "%windir%/explorer.exe"
y también permitió que se ejecuten otros comandos después de que en el script
Utilice este (.bat con privilegios administrativos) en x64 o x86
tasklist /fi "imagename eq explorer*" | find /i "explorer*"
if not errorlevel 1 (taskkill /f /im "explorer*") else (
start %windir%/explorer.exe
Simplemente haga clic derecho en el escritorio y elija Reiniciar el Explorador de Windows . ¡Disfrutar!