J'ai vu l' autre sujet et j'ai un autre problème. Le processus démarre (vu au 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");
J'ai vu l' autre sujet et j'ai un autre problème. Le processus démarre (vu au 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");
Réponses:
Vous êtes-vous assuré que le dossier " c:\teste
" existe? Si ce n'est pas le cas, l'explorateur s'ouvrira en affichant 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 aucun de ceux-ci (enfin, sauf celui qui lance 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'essaierais l'une (ou les deux) des solutions suivantes:
Process.Start(path)
active la fenêtre (peut uniquement clignoter dans la barre des tâches, pas au premier plan); 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 mises en garde.
Process.Start(@"c:\temp")
doit être utilisé avec prudence. S'il c:\temp.com
existe, l'appel de fonction s'ouvrira à la c:\temp.com
place. Voir forums.iis.net/p/1239773/2144186.aspx pour plus de détails.
Process.Start(@"c:\temp")
est susceptible d'ouvrir un dossier différent tel que C:\temp.exe
ou C:\temp.cmd
. Voir ce problème où VS lui-même présente un comportement bogué . Vous pouvez éviter cela en utilisant la explorer.exe
variante ou (mieux, IMO) en ajoutant toujours un fichier Path.DirectorySeparatorChar
. Par exemple Process.Start(@"C:\temp\")
,.
Juste 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.
C:\teste.exe
ou C:\teste.cmd
existe, l'Explorateur s'ouvrira dans cet autre dossier au lieu de celui que vous vouliez. Pour éviter cela, vous pouvez ajouter un Path.DirectorySeparatorChar
au chemin. Voyez comment VS lui-même fait la même erreur .
Verb = "select"
, mais hélas vous ne pouvez pas. Quoi qu'il en soit, bonne réponse!
Verb = "open"
n'était pas nécessaire. (Testé sous Windows, d'autres systèmes d'exploitation peuvent différer.)
.Verbs
propriété sur ProcessStartInfo
( docs.microsoft.com/en-us/dotnet/api/… )
Vous utilisez le symbole @, ce qui évite d'avoir à échapper vos contre-obliques.
Supprimez le @ ou remplacez \\ par \
Vous n'avez pas besoin de la double barre oblique inverse lorsque vous utilisez des chaînes sans échappement:
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
Vous devez utiliser l'une des System.Diagnostics.Process.Start()
surcharges. C'est assez simple!
Si vous ne placez pas le nom de fichier du processus que vous souhaitez exécuter ( explorer.exe
), le système le reconnaîtra comme un chemin de dossier valide et essaiera de le joindre au processus Explorer déjà 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 passant la deuxième chaîne comme paramètre. Si la chaîne est un dossier valide, elle est ouverte 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. L'utilisation System.IO.Directory.Exists()
devrait suffire à garantir cela.
Path.DirectorySeparatorChar
. Sinon, si un dossier portant le même nom mais .cmd
ou .exe
éventuellement d'autres suffixes existe également, l'Explorateur ouvrira cet autre dossier - ou s'il s'agit en fait d'exécutables ou de scripts, il les exécutera au lieu d'ouvrir le dossier comme vous le souhaitez.
Utilisez une version surchargée de la méthode qui prend une instance ProcessStartInfo et définissez la propriété ProcessWindowStyle sur une valeur qui vous convient.
Vous échappez à la barre oblique inverse lorsque le signe arobase le fait pour vous.
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
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 essayez de l'ouvrir, il échouera à coup sûr.
J'ai juste eu ce problème, et j'ai découvert pourquoi. ma raison n'est pas répertoriée ici, donc quiconque obtient ce problème et aucun de ceux-ci ne le résout.
Si vous exécutez Visual Studio en tant qu'autre utilisateur et essayez d'utiliser Process.Start, il s'exécutera dans ce contexte d'utilisateurs et vous ne le verrez pas sur votre écran.
É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 pouvez pas la voir.
Est-il possible qu'il s'ouvre hors écran (c'est-à-dire un autre moniteur)?
Ou faites-vous par hasard cela dans un service non interactif?
S'ouvre-t-il correctement lorsque vous exécutez "explorer.exe c: \ teste" à partir de votre menu Démarrer? Depuis combien de temps essayez-vous cela? Je vois un comportement similaire lorsque ma machine a beaucoup de processus et lorsque j'ouvre un nouveau processus (les ensembles disent IE) .. il démarre dans le gestionnaire de tâches mais n'apparaît pas dans le front-end. Avez-vous essayé un redémarrage?
Le code suivant devrait ouvrir une nouvelle instance d'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 un comportement étrange au travail parce que mon système manque de poignées GDI car j'ai tellement de fenêtres ouvertes (nos applications en utilisent beaucoup).
Lorsque cela se produit, les fenêtres et les menus contextuels n'apparaissent pas longtemps jusqu'à ce que je ferme quelque chose pour libérer certaines poignées GDI.
La limite par défaut dans XP et Vista est de 10000. Il n'est pas rare que mon DevStudio ait 1500 poignées GDI, donc si vous avez quelques copies de Dev studio ouvertes, il peut les manger assez rapidement. Vous pouvez ajouter une colonne dans TaskManager pour voir combien de poignées sont utilisées par chaque processus.
Vous pouvez modifier le registre pour augmenter la limite.
Pour plus d'informations, consultez http://msdn.microsoft.com/en-us/library/ms724291(VS.85).aspx
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
Changez simplement le chemin ou déclarez-le dans un string