J'ai vu le autre sujet et j'ai un autre problème. Le processus démarre (vu dans le gestionnaire de tâches) mais le dossier ne s'ouvre pas sur mon écran. Quel est le problème ?
System.Diagnostics.Process.Start("explorer.exe", @"c:\teste");
J'ai vu le autre sujet et j'ai un autre problème. Le processus démarre (vu dans le gestionnaire de tâches) mais le dossier ne s'ouvre pas sur mon écran. Quel est le problème ?
System.Diagnostics.Process.Start("explorer.exe", @"c:\teste");
Avez-vous vérifié que le dossier " c:\teste
"existe ? Si ce n'est pas le cas, l'explorateur s'ouvrira en montrant un dossier par défaut (dans mon cas " C:\Users\[user name]\Documents
").
Mise à jour
J'ai essayé les variations suivantes :
// opens the folder in explorer
Process.Start(@"c:\temp");
// opens the folder in explorer
Process.Start("explorer.exe", @"c:\temp");
// throws exception
Process.Start(@"c:\does_not_exist");
// opens explorer, showing some other folder)
Process.Start("explorer.exe", @"c:\does_not_exist");
Si aucune d'entre elles (sauf celle qui lève une exception) ne fonctionne sur votre ordinateur, je ne pense pas que le problème se situe dans le code, mais dans l'environnement. Si c'est le cas, j'essaierais l'une (ou les deux) des solutions suivantes :
J'en suis sûr et s'il n'existait pas, ouvrirait-on n'importe quel dossier de la même manière, ou pas ?
J'ai ouvert explorer.exe via cmd et ouvert normalement Aucun des Processs.Start n'a fonctionné sauf 'Process.Start(@"c : \does_not_exist ");' qui a déclenché une exception
Petite différence si la fenêtre de l'explorateur est déjà ouverte : Process.Start(path)
active la fenêtre (elle ne peut que clignoter dans la barre des tâches, elle n'est pas mise en avant) ; explorer.exe
+paramètre ouvre une nouvelle fenêtre toujours à l'avant (mais plusieurs fois la même fenêtre). Les deux ont donc des inconvénients.
Pour être complet, si tout ce que vous voulez faire est d'ouvrir un dossier, utilisez ceci :
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo() {
FileName = "C:\\teste\\",
UseShellExecute = true,
Verb = "open"
});
Assurez-vous que FileName se termine par Path.DirectorySeparatorChar
pour qu'il pointe sans ambiguïté vers un dossier. (Merci à @binki).
Cette solution ne fonctionnera pas pour ouvrir un dossier et sélectionner un élément, car il ne semble pas y avoir de verbe pour cela.
Si vous utilisez cette méthode et un dossier tel que C:\teste.exe
o C:\teste.cmd
existe, l'Explorer s'ouvrira sur cet autre dossier au lieu de celui que vous aviez prévu. Pour éviter cela, vous pouvez ajouter un Path.DirectorySeparatorChar
au chemin. Voir comment VS lui-même fait la même erreur .
Étant donné la réponse de @Scyssion qui utilise "/select", on pourrait penser que vous pouvez utiliser Verb = "select"
mais hélas, vous ne pouvez pas. Quoi qu'il en soit, excellente réponse !
Le dossier ne s'ouvre toujours pas Seul le processus est lancé dans le gestionnaire des tâches.
Je n'ai pas d'autres suggestions, j'ai pu tester et faire fonctionner le système en Visual C# express 2008.
Vous devez utiliser l'un des System.Diagnostics.Process.Start()
surcharges. C'est très simple !
Si vous ne placez pas le nom de fichier du processus que vous voulez exécuter ( explorer.exe
), le système le reconnaîtra comme un chemin de dossier valide et tentera de l'attacher au processus Explorer déjà en cours. Dans ce cas, si le dossier est déjà ouvert, l'Explorer ne fera rien.
Si vous placez le nom de fichier du processus (comme vous l'avez fait), le système essaiera d'exécuter une nouvelle instance du processus, en passant la deuxième chaîne comme paramètre. Si la chaîne est un dossier valide, il est ouvert sur le processus nouvellement créé, sinon, le nouveau processus ne fera rien.
Je ne sais pas comment les chemins de dossiers invalides sont traités par le processus dans tous les cas. Utilisation de System.IO.Directory.Exists()
devrait suffire pour s'en assurer.
N'oubliez pas que vous devez ajouter un fichier Path.DirectorySeparatorChar
. Sinon, si un dossier avec le même nom mais .cmd
o .exe
ou éventuellement d'autres suffixes, l'Explorateur s'ouvrira sur cet autre dossier - ou si ce sont des exécutables ou des scripts, il les exécutera au lieu d'ouvrir le dossier comme vous l'aviez prévu.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
0 votes
Êtes-vous sûr que votre chemin est correct ?
1 votes
Pourquoi voulez-vous appeler Explorer manuellement ? Pourquoi ne pas simplement ouvrir le dossier, c'est-à-dire appeler Process.Start avec un ProcessStartInfo avec UseShellExecute réglé sur true et Verb réglé sur "open" ?
1 votes
Oui, j'ai essayé d'ouvrir 'explorer.exe' sans le chemin et ça n'a pas marché non plus.
0 votes
Je n'ai pas posté parce que la question n'est pas comment ouvrir un dossier, mais plutôt comment lancer explorer.exe pour ouvrir un dossier. Je voulais juste savoir pourquoi vous voulez invoquer explorer directement en premier lieu, parce qu'il pourrait y avoir une raison ;)
0 votes
Je veux juste exclure des options ici, donc c'est peut-être une question stupide : vous ne faites pas cela sous Linux en utilisant mono, n'est-ce pas ? Nous parlons d'un environnement Windows ?
0 votes
Oui, Visual Studio | Windows Vista Business