Frage

Ich weiß, dass die folgenden funktionieren sollte:

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

Mein Problem mit diesem Aufruf ist, dass aus irgendeinem Grunde, wenn jemand die „windir“ Env Var entfernen entschieden, das wird nicht funktionieren.

Gibt es einen noch sicheren Weg, um das Systemlaufwerk zu bekommen?

War es hilfreich?

Lösung

Eine Sache, die ich eigentlich vielleicht falsch verstehen, dass Sie das Systemlaufwerk wollen, aber unter Verwendung von „windir“ Sie die Windows-Ordner erhalten. Wenn Sie also eine sichere Art und Weise müssen , um den Windows-Ordner zu erhalten, sollten Sie die gute alte API-Funktion GetWindowsDirectory verwenden.

Hier ist die Funktion vorbereitet für C # Nutzung. ; -)

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

Wenn Sie also wirklich das Laufwerk benötigen, auf dem Windows ausgeführt wird, können Sie danach rufen

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

Andere Tipps

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

Hinweis: Diese Eigenschaft intern verwendet die GetSystemDirectory () Win32 API. Es beruht nicht auf Umgebungsvariablen.

Dies gibt den Pfad in das Systemverzeichnis (System32).

Environment.GetFolderPath(Environment.SpecialFolder.System)

Sie können möglicherweise, dass verwenden, dann müssen Sie nicht auf die Umgebungsvariablen setzen.

Sie können mit dem GetWindowsDirectory API Windows-Verzeichnis.

abrufen

Lesen Sie niemals Umgebungsvariablen (jedes Skript oder Benutzer kann sie ändern!)
Die offiziellen Methode (MS intern, verwendet von Explorer) ist ein Win32-api FAQ seit Jahrzehnten (siehe Google-Gruppen, Win32, System api)

Theres eine Umgebungsvariable namens SystemDrive

C:\>SET SystemDrive
SystemDrive=C:
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top