私は使用しています:
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へのパスを返す方法はありますか?
以下の関数は、これら3つのWindows構成すべてでx86 Program Files
ディレクトリを返します。
static string ProgramFilesx86()
{
if( 8 == IntPtr.Size
|| (!String.IsNullOrEmpty(Environment.GetEnvironmentVariable("PROCESSOR_ARCHITEW6432"))))
{
return Environment.GetEnvironmentVariable("ProgramFiles(x86)");
}
return Environment.GetEnvironmentVariable("ProgramFiles");
}
.NET 4を使用している場合、特別なフォルダー列挙があります ProgramFilesX86 :
Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)
Environment.GetEnvironmentVariable("PROGRAMFILES(X86)") ?? Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)
ただし、ProgramFiles(x86)
環境変数は、アプリケーションが64ビットを実行している場合にのみ利用可能であることに注意してください。
アプリケーションが32ビットを実行している場合、値が実際に「Program Files(x86)」になるProgramFiles
環境変数を使用できます。
1つの方法は、「ProgramFiles(x86)」環境変数を探すことです。
String x86folder = Environment.GetEnvironmentVariable("ProgramFiles(x86)");
Windows 7のx86とx64プラットフォームの両方で実行できるアプリケーションを作成しており、以下の変数を照会すると、任意のプラットフォームで適切なプログラムファイルフォルダーパスが取得されます。
Environment.GetEnvironmentVariable("PROGRAMFILES")
.NETの新しいメソッドを使用するワンライナー。常にx86 Program Filesフォルダーを返します。
Environment.Is64BitOperatingSystem ? Environment.GetEnvironmentVariable("ProgramFiles(x86)") : Environment.GetEnvironmentVariable("ProgramFiles"))