Pergunta

Eu sei que o seguinte deve funcionar:

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

Meu problema com esta chamada é que, se por algum motivo alguém decidiu remover o "windir" Env Var, isto não vai funcionar.

Existe uma maneira ainda mais segura para obter a unidade do Sistema?

Foi útil?

Solução

Uma coisa que eu realmente talvez não compreendem é que você quer que a unidade do sistema, mas usando "windir" você vai ter a pasta do Windows. Então, se você precisa de um maneira segura para obter a pasta do Windows, você deve usar a boa função API GetWindowsDirectory de idade.

Aqui é a função preparada para o uso 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();
    }

Então, se você realmente precisa da unidade em que o Windows está em execução, você pode depois chamar

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

Outras dicas

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

Nota: Esta propriedade internamente usa a API GetSystemDirectory () Win32. Ele não depende de variáveis ??de ambiente.

este retorna o caminho para o diretório do sistema (system32).

Environment.GetFolderPath(Environment.SpecialFolder.System)

Você pode ser capaz de usar isso, então você não precisa confiar em variáveis ??de ambiente.

Você pode usar o GetWindowsDirectory API para recuperar o diretório do Windows.

Nunca ler variáveis ??de ambiente (qualquer script ou o utilizador poderá alterá-las!)
Os oficiais método (MS internos, usados ??por Explorer) é uma API Win32 FAQ por décadas (ver grupos do Google, Win32, sistema API)

Há um ambiente variável chamada SystemDrive

C:\>SET SystemDrive
SystemDrive=C:
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top