web-dev-qa-db-ja.com

「ProgramFiles」フォルダへの実際のパスをプログラムで取得するにはどうすればよいですか?

重複の可能性:
C#-Windows Vista 64ビットでProgram Files(x86)を取得する方法

ユーザーがWindowsのデフォルトであるC:\Program Filesを変更する可能性はかなり低いと思いますが、奇妙なことが起こっています。

システムからProgram Filesへの正しいパスを取得するにはどうすればよいですか?

21
brasskazoo

.NETは、プログラムファイル、マイドキュメントなどの ' 特別なフォルダ 'の列挙を提供します。

列挙型から実際のパスに変換するコードは次のようになります。

Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)

http://msdn.Microsoft.com/en-us/library/14tx8hby.aspx

35
brasskazoo

これに追加するだけです。

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)\

明らかにこれはあなたのロケールなどに依存します...

28
John B

Environment クラスで GetFolderPath を使用します。

try {
    Environment.GetFolderPath( Environment.SpecialFolder.ProgramFiles )
catch( ArgumentException ex ) {
    Console.Out.WriteLine( ex.StackTrace );
}
5
Huppie

Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)がおそらく最善の解決策ですが、別の可能な変形はProgramFiles環境変数の値を評価することです。これには、 GetEnvironmentVariable または ExpandEnvironmentVariables メソッドの Environment を使用できます。クラス:

Environment.GetEnvironmentVariable("ProgramFiles")

Environment.ExpandEnvironmentVariables("%ProgramFiles%")
2
Helen
Environment.GetEnvironmentVariable("PROGRAMFILES(X86)") ?? Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)

64ビットWindowsで「programfiles(x86)」を取得し、32ビットで「programfiles」を取得します。

1
Carl Hörberg

次の環境変数にアクセスできます:%PROGRAMFILES%

つまり:

%PROGRAMFILES%\Maxis\SimCity

c#で:

System.Environment.SpecialFolder.ProgramFiles
1