私は以下がうまくいくはずであることを知っています:
Environment.GetEnvironmentVariable("windir", EnvironmentVariableTarget.Machine)
この呼び出しに関する私の問題は、何らかの理由で誰かが「windir」 Env Var を削除することを決定した場合、これは機能しないことです。
システムドライブを取得するさらに安全な方法はありますか?
私は以下がうまくいくはずであることを知っています:
Environment.GetEnvironmentVariable("windir", EnvironmentVariableTarget.Machine)
この呼び出しに関する私の問題は、何らかの理由で誰かが「windir」 Env Var を削除することを決定した場合、これは機能しないことです。
システムドライブを取得するさらに安全な方法はありますか?
string windir = Environment.SystemDirectory; // C:\windows\system32
string windrive = Path.GetPathRoot(Environment.SystemDirectory); // C:\
注: このプロパティは、GetSystemDirectory() Win32 API を内部的に使用します。環境変数に依存しません。
これは、システム ディレクトリ (system32) へのパスを返します。
Environment.GetFolderPath(Environment.SpecialFolder.System)
それを使用できる場合は、環境変数に依存する必要はありません。
私が実際に誤解していることの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());
Windows ディレクトリを取得するには、 GetWindowsDirectory API を使用できます。
と呼ばれる環境変数がありますSystemDrive
C:\>SET SystemDrive
SystemDrive=C: