Le redémarrage de explorer.exe ne s'ouvre une fenêtre de l'explorateur

Le Problème

Dans une partie d'un fichier de commandes (genre, voir Informations Supplémentaires) j'ai besoin de redémarrer
Explorer, j'utilise donc le, essayé et testé la méthode de

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

Alors ce qui se passe

  1. explorer.exe est terminée avec succès
  2. explorer.exe est démarré (voir l'Image 2), mais seulement un
    La fenêtre de l'explorateur s'ouvre, je suis parti avec indéfiniment (voir Image 1)

Je peux seulement redémarrer correctement Explorer par le démarrage d'une nouvelle tâche de Tâche
Gestionnaire, comme, je suppose, Win + R fait partie de l'Explorateur.

Informations Supplémentaires

Maintenant, je dis "genre" que je suis l'exécution du fichier de commandes à partir d'un auto-exécution de SFX
archive, créé avec WinRAR. Ainsi, lorsqu'il est exécuté, le contenu de l'archive sont
extrait de %temp% et d'un fichier défini par l'utilisateur (généralement un boot-strapper et, dans
ce cas, mon fichier de commandes) est exécuté lors de l'extraction réussie.

Jusqu'à présent, j'ai déduit

  1. explorer.exe est certainement pleinement tué.
  2. Le fichier de commandes est certainement appelé et exécuté correctement, comme il fonctionne, et
    tout le reste dans le script fonctionne comme prévu, sauf pour la ligne
    commence explorer.exe
  3. La commande pour redémarrer l'Explorateur n'est pas "mal placé", ou quoi que ce soit, comme je l'ai
    essayé de le retarder.
  4. Le fichier batch fonctionne parfaitement lorsque extraites manuellement à partir de l'archive,
    ce n'est pas un problème avec la compression ou des procédés d'extraction.
  5. Même avec des commandes comme start explorer.exe | cmd.exe Explorer n'est pas
    redémarrer correctement, il est donc certainement pas un problème avec le .bat fichier.

Je peux confirmer qu'il fonctionne sur Windows XP et Windows 7 x86, mais pas Windows 7
x64 (ce qui est mon système).

Statut

Pour le moment, je me méfie de WinRAR, comme je l'ai prouvé que le code lui-même
des œuvres. Donc, je suis de la création de l'auto-exécution SFX avec différentes versions de
WinRAR. Jusqu'à présent, j'ai essayé les versions:

  • 4.11 x86
  • 4.11 x64
  • 4.20b3 x86
  • 4.20b3 x64

et avaient les mêmes résultats à chaque fois.

J'ai envoyé un rapport de bug [email protected] hier et eu une réponse de
Eugene Roshal lui-même
ce matin

Bonjour,
SFX module utilise ShellExecuteEx pour lancer l'installation de l'application.
Normalement, ça marche bien. Je ne sais pas pourquoi Explorateur décide de commutateur
en mode fenêtré.
Maintenant, j'ai construit un petit programme autonome

#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);
}

qui test s'exécute.chauve-souris avec le contenu comme dans votre exemple. Ce programme
montre exactement le même comportement que WinRAR SFX, donc Explorer est lancé
dans la fenêtre.

et un second e-mail de ce matin

Désolé, aucun avis n'maintenant. J'ai remplacé ShellExecuteEx avec 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);
}

mais le résultat est le même. J'ai essayé d'utiliser d'autres SW_ des drapeaux comme
SW_SHOWDEFAULT ou SW_RESTORE avec ShellExecuteEx aussi "ouvert"
et à "explorer" lpVerb, mais ça n'aide pas. Pour l'instant je n'ai pas
comprendre la logique derrière cette fenêtre contre le mode de bureau.

Je me rends compte à l'avenir est sombre, mais, j'espère que c'est de l'aide à quelqu'un..

Preuve

Lien vers une archive SFX de le démontrer, si quelqu'un le veut:
https://dl.dropbox.com/u/27573003/Social%20Distribution/restart-explorer.exe

Le redémarrage de explorer.exe ne s'ouvre une fenêtre de l'explorateur

Le redémarrage de explorer.exe ne s'ouvre une fenêtre de l'explorateur

Vous remarquerez peut-être ici que je l'exécute les commandes à l'intérieur d'une VM (comme indiqué par les
VMwareTray.exe ), mais ce n'est pas une VM-à l'origine de conflits. J'ai testé exactement la même
les fichiers sur mon propre système hôte (qui est le même OS), et ont eu le même
résultats.

Mise à jour

Je suis en train de vivre similaire "travaille à l'extérieur d'une archive SFX, mais pas d'un"
problèmes lors de l'utilisation de REG ADD dans un tout autre projet.
Je ne pense pas que SFX archives de jouer gentil avec les fichiers par lots.

  • Fonctionne sur XP 32. Peut-être que votre exe n'a pas le permis de tuer? L'UAC et de l'Internet sécurité de la Zone paramètres peuvent être les coupables.
  • Mais il n'tuer le processus. Il n'a tout simplement pas redémarrer correctement. Et il n'y a pas toute l'UAC popups et en cours d'exécution en tant qu'administrateur n'est pas de faire une différence.
  • Attendez, si c'est réellement tuer le processus, et c'est l'ouverture d'une fenêtre de l'explorateur par la suite, alors comment est-il pas le redémarrage de l'explorateur? Dernière, j'ai vérifié, vous ne pouvez pas avoir une fenêtre de l'explorateur s'ouvrir sans explorer en cours d'exécution.
  • Exactement. D'où ma confusion.
  • Je me demande si une partie de Win-RAR est en cours d'exécution en mode 32 bits? Pourriez-vous même de commencer à explorer64 cours d'exécution à partir d'un processus 32 bits? Je suis assez certain que Windows ne le ferai pas.