Какой самый безопасный способ получить системный диск

Я знаю, что следующее должно работать:

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

Моя проблема с этим вызовом заключается в том, что если по какой-то причине кто-то решил удалить "windir" Env Var, это не сработает.

Есть ли еще более безопасный способ получить системный диск?

Ответ 1

Одна вещь, которую я, возможно, неправильно понимаю, - это то, что вы хотите системный диск, но, используя "windir", вы получите папку Windows. Поэтому, если вам нужен безопасный способ получить папку Windows, вы должны использовать старую функцию API GetWindowsDirectory.

Вот функция, подготовленная для использования С#.; -)

    [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();
    }

Итак, если вам действительно нужен диск, на котором работают окна, вы можете впоследствии вызвать

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

Ответ 2

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

Примечание. Это свойство внутренне использует API-интерфейс GetSystemDirectory() Win32. Он не полагается на переменные среды.

Ответ 3

Этот возвращает путь к системному каталогу (system32).

Environment.GetFolderPath(Environment.SpecialFolder.System)

Возможно, вы сможете использовать это, тогда вам не нужно полагаться на переменные среды.

Ответ 4

Вы можете использовать API GetWindowsDirectory для извлечения каталога Windows.

Ответ 5

Никогда не читайте переменные среды (любой script или пользователь может их изменить!)
официальный метод (внутренний, используемый Explorer) - это часто задаваемые вопросы Win32 api (см. Группы Google, Win32, System api)

Ответ 6

Параметр среды окружения называется SystemDrive

C:\>SET SystemDrive
SystemDrive=C: