ユーザーがWindowsのデフォルトであるC:\Program Files
を変更する可能性はかなり低いと思いますが、奇妙なことが起こっています。
システムからProgram Files
への正しいパスを取得するにはどうすればよいですか?
.NETは、プログラムファイル、マイドキュメントなどの ' 特別なフォルダ 'の列挙を提供します。
列挙型から実際のパスに変換するコードは次のようになります。
Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)
これに追加するだけです。
32ビットモードで実行している場合(64ビットOSでも)、SpecialFolder.ProgramFilesおよび%PROGRAMFILES%は..Program Files(x86)を返します。
特に一方または他方が必要な場合は、次のように確認する必要があります。
2ビットシステム:
_SpecialFolder.ProgramFiles
_ = ..プログラムファイル\
64ビットシステムの2ビットプロセス:_SpecialFolder.ProgramFiles
_ = ..Program Files(x86)\ Environment.GetEnvironmentVariable("ProgramW6432")
= ..Program Files \
64ビットシステムの64ビットプロセス:_SpecialFolder.ProgramFiles
_ = ..Program Files\Environment.GetEnvironmentVariable("PROGRAMFILES(X86)")
= ..Program Files(x86)\
明らかにこれはあなたのロケールなどに依存します...
Environment クラスで GetFolderPath を使用します。
try {
Environment.GetFolderPath( Environment.SpecialFolder.ProgramFiles )
catch( ArgumentException ex ) {
Console.Out.WriteLine( ex.StackTrace );
}
Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)
がおそらく最善の解決策ですが、別の可能な変形はProgramFiles
環境変数の値を評価することです。これには、 GetEnvironmentVariable
または ExpandEnvironmentVariables
メソッドの Environment
を使用できます。クラス:
Environment.GetEnvironmentVariable("ProgramFiles")
Environment.ExpandEnvironmentVariables("%ProgramFiles%")
Environment.GetEnvironmentVariable("PROGRAMFILES(X86)") ?? Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)
64ビットWindowsで「programfiles(x86)」を取得し、32ビットで「programfiles」を取得します。
次の環境変数にアクセスできます:%PROGRAMFILES%
つまり:
%PROGRAMFILES%\Maxis\SimCity
c#で:
System.Environment.SpecialFolder.ProgramFiles