web-dev-qa-db-ja.com

C#-Windows 64ビットでプログラムファイル(x86)を取得する方法

私は使用しています:

FileInfo(
    System.Environment.GetFolderPath(
        System.Environment.SpecialFolder.ProgramFiles) 
    + @"\MyInstalledApp"

プログラムがユーザーマシンで検出されたかどうかを判断するために(理想的ではありませんが、探しているプログラムはMS-DOSアプリケーションの古くからあるものであり、他の方法は考えられませんでした)。

Windows XPおよびWindows Vistaの32ビットバージョンでは、これは正常に機能します。ただし、x64 Windows Vistaでは、コードはx64 Program Filesフォルダーを返しますが、アプリケーションはProgram Files x86にインストールされます。 「C:\ Program Files(x86)」をハードワイヤリングせずにプログラムでプログラムファイルx86へのパスを返す方法はありますか?

150

以下の関数は、これら3つのWindows構成すべてでx86 Program Filesディレクトリを返します。

  • 32ビットWindows
  • 64ビットWindowsで実行されている32ビットプログラム
  • 64ビットウィンドウで実行される64ビットプログラム

static string ProgramFilesx86()
{
    if( 8 == IntPtr.Size 
        || (!String.IsNullOrEmpty(Environment.GetEnvironmentVariable("PROCESSOR_ARCHITEW6432"))))
    {
        return Environment.GetEnvironmentVariable("ProgramFiles(x86)");
    }

    return Environment.GetEnvironmentVariable("ProgramFiles");
}
228
JaredPar

.NET 4を使用している場合、特別なフォルダー列挙があります ProgramFilesX86

Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)
129
Nathan
Environment.GetEnvironmentVariable("PROGRAMFILES(X86)") ?? Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)
42
Carl Hörberg

ただし、ProgramFiles(x86)環境変数は、アプリケーションが64ビットを実行している場合にのみ利用可能であることに注意してください。

アプリケーションが32ビットを実行している場合、値が実際に「Program Files(x86)」になるProgramFiles環境変数を使用できます。

14
chadmyers

1つの方法は、「ProgramFiles(x86)」環境変数を探すことです。

String x86folder = Environment.GetEnvironmentVariable("ProgramFiles(x86)");
9
tomasr

Windows 7のx86とx64プラットフォームの両方で実行できるアプリケーションを作成しており、以下の変数を照会すると、任意のプラットフォームで適切なプログラムファイルフォルダーパスが取得されます。

Environment.GetEnvironmentVariable("PROGRAMFILES")
5
Samir

.NETの新しいメソッドを使用するワンライナー。常にx86 Program Filesフォルダーを返します。

Environment.Is64BitOperatingSystem ? Environment.GetEnvironmentVariable("ProgramFiles(x86)") : Environment.GetEnvironmentVariable("ProgramFiles"))

0
Red John