以C#编程方式查找Windows文件夹

45

我正在编写一个程序来终止和重新启动资源管理器,但我不想硬编码资源管理器的位置,因为一些人在不同的位置安装了Windows(例如,我找到有人将其安装在D:\驱动器上,在C:\驱动器上没有安装任何东西)

我尝试查看Environment.SpecialFolder下的选项,但我没有看到"windows"选项

最好的方法是什么?


2
你会考虑将被接受的答案改为我写的那个吗?它不需要管理员权限并支持较低版本的 .net 框架。 - Adam Lindsay
4个回答

73

7
需要管理员权限。 - Rafik Bari

61

Environment.GetFolderPath(Environment.SpecialFolder.Windows)将返回Windows文件夹的路径。建议使用此方法而不是环境变量,因为它使用了一个可以精确满足我们需求的API(.NET 4.0及以上版本)。


2
你应该在回复中指出,在.NET版本低于4.0的情况下,Environment.SpecialFolder.Windows不存在。你还在“SpecialFolder”中有一个错别字。 - Jason Slocomb

28

我强烈推荐使用:

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

它不需要管理员权限,并支持所有版本的.NET框架。


完美。这应该是被接受的答案,因为它不需要管理员权限。 - carefulnow1

10

如果只是简单地杀死和重启Windows资源管理器,你不需要系统文件夹的路径,因为这已经包含在PATH环境变量中了(除非用户对其进行了更改)。

该短程序将杀死所有explorer.exe实例,然后重新启动explorer.exe:

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

这是否假定该程序将位于资源管理器的根目录下? - Crash893
1
@Crash893:不需要,只需复制代码并尝试即可 :-) - Dirk Vollmar
1
我会给你加一,但这不是问题的答案,但我很感谢你关注更大的问题。 - Crash893
@divo ps。它能够工作,但我不确定它是如何知道 explorer.exe 的位置的。 - Crash893
这个工作是因为系统根文件夹("C:\Windows")被包含在你的路径环境变量中。打开命令提示符并输入 echo %PATH%,然后你会看到C:\Windows被打印在以';'分隔的目录列表中。当你在shell上执行命令时,所有在你的路径变量中的文件夹都会被搜索。当你执行 Process.Start("explorer.exe"); 时不会发生其他任何事情。 - Dirk Vollmar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接