web-dev-qa-db-fra.com

Ouvrez un dossier en utilisant Process.Start

J'ai vu le autre sujet et j'ai un autre problème. Le processus est en cours de démarrage (vu dans le gestionnaire de tâches) mais le dossier ne s'ouvre pas sur mon écran. Qu'est-ce qui ne va pas?

System.Diagnostics.Process.Start("Explorer.exe", @"c:\teste");
135
Daniel

Vous êtes-vous assuré que le dossier "c:\teste" existe? Si ce n'est pas le cas, l'Explorateur s'ouvre et affiche un dossier par défaut (dans mon cas, "C:\Users\[user name]\Documents").

Mise à jour

J'ai essayé les variantes 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 de ces solutions (à l'exception de celle qui lève une exception) ne fonctionne sur votre ordinateur, je ne pense pas que le problème réside dans le code, mais dans l'environnement. Si tel est le cas, j’essaierai l’une des méthodes suivantes (ou les deux):

  • Ouvrez la boîte de dialogue Exécuter, entrez "Explorer.exe" et appuyez sur Entrée.
  • Ouvrez une invite de commande, tapez "Explorer.exe" et appuyez sur Entrée
234
Fredrik Mörk

Juste pour être complet, si tout ce que vous voulez faire, c'est 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é sur 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.

40
OregonGhost

Si vous souhaitez sélectionner le fichier ou le dossier, vous pouvez utiliser les éléments suivants:

Process.Start("Explorer.exe", "/select, c:\\teste");
15
Scyssion

Vous utilisez le symbole @, ce qui vous évite d'avoir à échapper vos barres obliques inverses.

Supprimez le @ ou remplacez \\ par \

5
Kevin Laity

Vous n'avez pas besoin de la double barre oblique inversée lorsque vous utilisez des chaînes non échappées:

System.Diagnostics.Process.Start("Explorer.exe",@"c:\teste");
4
Joel Coehoorn

Vous devez utiliser l’une des surcharges System.Diagnostics.Process.Start(). C'est assez simple!

Si vous ne placez pas le nom du fichier du processus à exécuter (Explorer.exe]), le système le reconnaîtra comme chemin de dossier valide et essaiera de le joindre au processus Explorer en cours d'exécution. Dans ce cas, si le dossier est déjà ouvert, 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 transmettant la deuxième chaîne en tant que 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 non valides sont traités par le processus dans tous les cas. Utiliser System.IO.Directory.Exists() devrait suffire.

3
Leonardo Maxson
System.Diagnostics.Process.Start("Explorer.exe",@"c:\teste"); 

Ce code fonctionne correctement à partir de l'environnement VS2010 et ouvre correctement le dossier local, mais si vous hébergez la même application dans IIS et tentez de l'ouvrir, il échouera à coup sûr.

1
user3815534

Utilisez une version surchargée de la méthode prenant une instance de ProcessStartInfo et définissez la propriété ProcessWindowStyle sur une valeur qui vous convient.

1
Jeremy Cron

Je viens d'avoir ce problème, et j'ai découvert pourquoi. ma raison n'est pas listée ici, donc tout le monde qui a ce problème et aucun de ceux-ci ne le résolvent.

Si vous exécutez Visual Studio en tant qu'utilisateur différent et tentez d'utiliser Process.Start, il s'exécutera dans le contexte de cet utilisateur et vous ne le verrez pas sur votre écran.

1
New Bee

Est-ce qu'il s'ouvre correctement lorsque vous exécutez "Explorer.exe c:\teste" à partir du menu Démarrer? Depuis combien de temps essayez-vous cela? Je constate un comportement similaire lorsque ma machine a beaucoup de processus et que j’ouvre un nouveau processus (les ensembles disent IE). Il commence dans le gestionnaire de tâches mais ne s’affiche pas au début. Avez-vous essayé un redémarrage?

Le code suivant devrait ouvrir une nouvelle instance de l'explorateur

class sample{

static void Main()
{
  System.Diagnostics.Process.Start("Explorer.exe",@"c:\teste");
}
}
0
schar

Avez-vous beaucoup d'applications en cours d'exécution lorsque vous essayez cela? Je rencontre parfois des comportements étranges au travail, parfois parce que mon système est à court de GDI, car de nombreuses fenêtres sont ouvertes (nos applications en utilisent beaucoup).

Lorsque cela se produit, les fenêtres et les menus contextuels n'apparaissent plus jusqu'à ce que je ferme quelque chose qui libère des poignées GDI.

La limite par défaut dans XP et Vista est de 10 000. Il n'est pas rare que mon DevStudio ait 1500 poignées, GDI, de sorte que si vous avez quelques copies de Dev studio ouvertes, mange-les assez vite. Vous pouvez ajouter une colonne dans TaskManager pour voir le nombre de descripteurs utilisés par chaque processus.

Il existe un tweak de registre que vous pouvez faire pour augmenter la limite.

Pour plus d'informations, voir http://msdn.Microsoft.com/en-us/library/ms724291 (VS.85) .aspx

0
Curtis

Vous échappez à la barre oblique inversée lorsque le signe at fait cela pour vous.

System.Diagnostics.Process.Start("Explorer.exe",@"c:\teste");
0
Austin Salonen

System.Diagnostics.Process.Start("Explorer.exe",@"c:\teste");

Il suffit de changer le chemin ou de le déclarer dans un string

0
Gaurav Bari

Étrange.

S'il ne trouve pas Explorer.exe, vous devriez obtenir une exception. S'il ne trouve pas le dossier, il devrait quand même ouvrir un dossier (par exemple, mes documents).

Vous dites qu'une autre copie de l'Explorateur apparaît dans le gestionnaire de tâches, mais vous ne la voyez pas.

Est-il possible qu'il ouvre hors écran (c'est-à-dire un autre moniteur)?

Ou faites-vous cela par hasard dans un service non interactif?

0
sgmoore