Qual é a maneira mais segura de recuperar a unidade do sistema
-
05-09-2019 - |
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?
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: