14

私は以下がうまくいくはずであることを知っています:

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

この呼び出しに関する私の問題は、何らかの理由で誰かが「windir」 Env Var を削除することを決定した場合、これは機能しないことです。

システムドライブを取得するさらに安全な方法はありますか?

4

6 に答える 6

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

注: このプロパティは、GetSystemDirectory() Win32 API を内部的に使用します。環境変数に依存しません。

于 2009-05-26T10:37:56.097 に答える
9

これは、システム ディレクトリ (system32) へのパスを返します。

Environment.GetFolderPath(Environment.SpecialFolder.System)

それを使用できる場合は、環境変数に依存する必要はありません。

于 2009-05-26T10:36:20.237 に答える
5

私が実際に誤解していることの1つは、システムドライブが必要であるということですが、「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());
于 2009-05-26T11:20:24.937 に答える
2

Windows ディレクトリを取得するには、 GetWindowsDirectory API を使用できます。

于 2009-05-26T10:36:22.870 に答える
0

と呼ばれる環境変数がありますSystemDrive

C:\>SET SystemDrive
SystemDrive=C:
于 2009-05-26T10:34:39.163 に答える