Какой самый безопасный способ восстановить системный диск - PullRequest
12 голосов
/ 26 мая 2009

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

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

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

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

Ответы [ 6 ]

19 голосов
/ 26 мая 2009
string windir = Environment.SystemDirectory; // C:\windows\system32
string windrive = Path.GetPathRoot(Environment.SystemDirectory); // C:\

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

8 голосов
/ 26 мая 2009

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

Environment.GetFolderPath(Environment.SpecialFolder.System)

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

4 голосов
/ 26 мая 2009

Одна вещь, которую я на самом деле, возможно, неправильно понимаю, это то, что вам нужен системный диск, но с помощью «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());
2 голосов
/ 26 мая 2009

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

1 голос
/ 27 мая 2009

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

0 голосов
/ 26 мая 2009

Theres переменная окружения с именем SystemDrive

C:\>SET SystemDrive
SystemDrive=C:
...