153

私は使用しています:

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)」を配線せずに Program Files x86 へのパスをプログラムで返す方法はありますか?

4

8 に答える 8

233

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

  • 32 ビット Windows
  • 64 ビット Windows で実行される 32 ビット プログラム
  • 64 ビット Windows で実行される 64 ビット プログラム

 

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

    return Environment.GetEnvironmentVariable("ProgramFiles");
}
于 2008-10-11T15:45:38.387 に答える
143

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

Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)
于 2010-12-22T21:58:44.937 に答える
42
Environment.GetEnvironmentVariable("PROGRAMFILES(X86)") ?? Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)
于 2010-12-14T18:02:52.753 に答える
14

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

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

于 2008-10-11T15:19:56.787 に答える
9

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

String x86folder = Environment.GetEnvironmentVariable("ProgramFiles(x86)");
于 2008-10-11T14:59:37.013 に答える
5

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

Environment.GetEnvironmentVariable("PROGRAMFILES")
于 2011-02-28T09:26:13.713 に答える