14

我知道以下应该有效:

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

我对这个电话的问题是,如果由于某种原因有人决定删除“windir” Env Var ,这将不起作用。

有没有更安全的方法来获取系统驱动器?

4

6 回答 6

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

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

于 2009-05-26T10:37:56.097 回答
9

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

Environment.GetFolderPath(Environment.SpecialFolder.System)

您也许可以使用它,那么您不需要依赖环境变量。

于 2009-05-26T10:36:20.237 回答
5

我实际上可能误解的一件事是您想要系统驱动器,但是通过使用“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());
于 2009-05-26T11:20:24.937 回答
2

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

于 2009-05-26T10:36:22.870 回答
1

永远不要读取环境变量(任何脚本或用户都可以更改它们!)
官方方法(MS 内部,由 Explorer 使用)是几十年来的 Win32 api 常见问题解答(参见 Google 组、Win32、系统 api)

于 2009-05-27T15:38:56.833 回答
0

有一个环境变量叫做SystemDrive

C:\>SET SystemDrive
SystemDrive=C:
于 2009-05-26T10:34:39.163 回答