I am writing a program to kill and restart explorer but I don't want to hard code the location because some people install windows in different places (for example I found someone who had it installed in the d:\ drive where the C:\ drive did exist but had nothing installed on it)
I tried looking under Environment.SpecialFolder. but I don't see a "windows" option under that
What is the best way to do this?
http://msdn.microsoft.com/en-us/library/77zkk0b6.aspx
Try these:
Environment.GetEnvironmentVariable("SystemRoot")
Environment.GetEnvironmentVariable("windir")
Environment.GetFolderPath( Environment.SpecialFolder.Windows )
will return the path to the Windows folder. Recommend this approach over the environment variable, because using an API that does exactly what we want (.NET 4.0 and above).
I would highly recommend the use of:
Directory.GetParent(Environment.GetFolderPath(Environment.SpecialFolder.System))
It does NOT require administrator rights and supports all versions of the .NET framework.
To simply kill and restart Windows Explorer you wouldn't need the path to the system folder as this is already included in the PATH environment variable (unless the user messed with it).
That short program will kill all explorer.exe instances and then restart explorer.exe:
static void Main(string[] args)
{
foreach (Process process in Process.GetProcessesByName("explorer"))
{
if (!process.HasExited)
{
process.Kill();
}
}
Process.Start("explorer.exe");
}
来源:https://stackoverflow.com/questions/1499354/find-windows-folder-programmatically-in-c-sharp