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");
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):
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.
Si vous souhaitez sélectionner le fichier ou le dossier, vous pouvez utiliser les éléments suivants:
Process.Start("Explorer.exe", "/select, c:\\teste");
Vous utilisez le symbole @, ce qui vous évite d'avoir à échapper vos barres obliques inverses.
Supprimez le @ ou remplacez \\ par \
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");
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.
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.
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.
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.
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");
}
}
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
Vous échappez à la barre oblique inversée lorsque le signe at fait cela pour vous.
System.Diagnostics.Process.Start("Explorer.exe",@"c:\teste");
System.Diagnostics.Process.Start("Explorer.exe",@"c:\teste");
Il suffit de changer le chemin ou de le déclarer dans un string
É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?