2009-09-30 8 views
33

J'écris un programme pour tuer et redémarrer l'explorateur, mais je ne veux pas coder l'emplacement car certaines personnes installent des fenêtres à différents endroits (par exemple, j'ai trouvé quelqu'un qui l'avait installé dans le d: \ drive où le lecteur C: \ existait mais n'avait rien installé dessus)Trouver le dossier Windows par programmation dans C#

J'ai essayé de regarder sous Environment.SpecialFolder. mais je ne vois pas une option "windows" sous cela

Quelle est la meilleure façon de faire cela?

+0

considérez-vous de changer la réponse acceptée à celle que j'ai écrite, il ne nécessite pas d'administration et prend en charge les versions antérieures du framework .net. –

Répondre

9

Pour tuer simplement et redémarrez Windows Explorer, vous auriez pas besoin du chemin d'accès au dossier système comme cela est déjà inclus dans la variable d'environnement PATH (à moins que le utilisateur a joué avec).

Ce programme court va tuer toutes les instances de explorer.exe puis redémarrez explorer.exe:

static void Main(string[] args) 
{ 
    foreach (Process process in Process.GetProcessesByName("explorer")) 
    { 
     if (!process.HasExited) 
     { 
      process.Kill(); 
     } 
    } 
    Process.Start("explorer.exe"); 
} 
+0

ne suppose pas que ce programme sera dans le répertoire racine avec l'explorateur? – Crash893

+1

+1: Pour une meilleure suggestion d'implémentation – Ian

+1

@ Crash893: Non, ce n'est pas nécessaire. Il suffit de copier le code et essayer :-) –

32

Environment.GetFolderPath(Environment.SpecialFolder.Windows) retourne le chemin vers le dossier Windows. Recommandez cette approche sur la variable d'environnement, car vous utilisez une API qui fait exactement ce que nous voulons (.NET 4.0 et plus).

+1

Vous devriez indiquer dans votre réponse que Environment.SpecialFolder.Windows n'existe pas sur les versions .NET <4.0. Vous avez également une faute de frappe dans "SpecialFolder". –

10

Je recommande fortement l'utilisation de:

Directory.GetParent(Environment.GetFolderPath(Environment.SpecialFolder.System)) 

Il ne nécessite pas de droits d'administrateur et prend en charge toutes les versions du framework .NET.

+0

Parfait. Cela devrait être la réponse acceptée car elle ne nécessite pas d'administration. – carefulnow1