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

use*_*637 12 .net c# windows system-administration environment-variables

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

Environment.GetEnvironmentVariable("windir", EnvironmentVariableTarget.Machine) 
Run Code Online (Sandbox Code Playgroud)

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

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

Ser*_*ier 21

string windir = Environment.SystemDirectory; // C:\windows\system32
string windrive = Path.GetPathRoot(Environment.SystemDirectory); // C:\
Run Code Online (Sandbox Code Playgroud)

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


Fre*_*örk 8

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

Environment.GetFolderPath(Environment.SpecialFolder.System)
Run Code Online (Sandbox Code Playgroud)

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


Oli*_*ver 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();
    }
Run Code Online (Sandbox Code Playgroud)

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

System.IO.Path.GetPathRoot(WindowsDirectory());
Run Code Online (Sandbox Code Playgroud)