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

Включите тест с несколькими вариантами ответов в конце диалогового окна, в котором пользователь должен выбрать ответ, который показывает, что он действительно прочитал и понял текст. Произвольно меняйте порядок выбора, чтобы они не всегда выбирали один и тот же.

12
задан user88637 26 May 2009 в 10:29
поделиться

6 ответов

Одна вещь, которую я на самом деле могу неправильно понять, это то, что вам нужен системный диск, но используя 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());
4
ответ дан 2 December 2019 в 04:09
поделиться
string windir = Environment.SystemDirectory; // C:\windows\system32
string windrive = Path.GetPathRoot(Environment.SystemDirectory); // C:\

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

21
ответ дан 2 December 2019 в 04:09
поделиться

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

1
ответ дан 2 December 2019 в 04:09
поделиться

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

2
ответ дан 2 December 2019 в 04:09
поделиться

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

Environment.GetFolderPath(Environment.SpecialFolder.System)

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

8
ответ дан 2 December 2019 в 04:09
поделиться

Существует переменная среды с именем SystemDrive

C:\>SET SystemDrive
SystemDrive=C:
0
ответ дан 2 December 2019 в 04:09
поделиться