检索系统驱动器的最安全方法是什么

时间:2009-05-26 10:29:13

标签: c# .net windows environment-variables system-administration

我知道以下内容应该有效:

Environment.GetEnvironmentVariable("windir", EnvironmentVariableTarget.Machine) 

我的问题是,如果由于某种原因有人决定删除“windir”Env Var,这将无效。

是否有更安全的方式来获取系统驱动器?

6 个答案:

答案 0 :(得分:19)

string windir = Environment.SystemDirectory; // C:\windows\system32
string windrive = Path.GetPathRoot(Environment.SystemDirectory); // C:\

注意:此属性在内部使用GetSystemDirectory()Win32 API。它不依赖于环境变量。

答案 1 :(得分:8)

这个返回系统目录的路径(system32)。

Environment.GetFolderPath(Environment.SpecialFolder.System)

您可以使用它,然后您不需要依赖环境变量。

答案 2 :(得分:4)

我实际上可能误解的一件事是你想要系统驱动器,但是通过使用“windir”你将获得windows文件夹。因此,如果您需要安全方式来获取Windows文件夹,则应使用旧的API函数GetWindowsDirectory。

这是为C#用法准备的功能。 ; - )

    [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
    static extern uint GetWindowsDirectory(StringBuilder lpBuffer, uint uSize);

    private string WindowsDirectory()
    {
        uint size = 0;
        size = GetWindowsDirectory(null, size);

        StringBuilder sb = new StringBuilder((int)size);
        GetWindowsDirectory(sb, size);

        return sb.ToString();
    }

因此,如果您确实需要运行Windows的驱动器,则可以调用

System.IO.Path.GetPathRoot(WindowsDirectory());

答案 3 :(得分:2)

您可以使用GetWindowsDirectory API检索Windows目录。

答案 4 :(得分:1)

永远不要阅读环境变量(任何脚本或用户都可以更改它们!)
几十年来,官方方法(MS内部,资源管理器使用)是一个Win32 api常见问题解答(参见Google网上论坛,Win32,系统API)

答案 5 :(得分:0)

Theres是一个名为SystemDrive

的环境变量
C:\>SET SystemDrive
SystemDrive=C: