[C#] Windows 64 비트에서 프로그램 파일 (x86)을 얻는 방법

나는 사용하고있다 :

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

프로그램이 사용자 컴퓨터에서 감지되는지 확인하기 위해 (이상적이지는 않지만 내가 찾고있는 프로그램은 MS-DOS 응용 프로그램의 오래된 구식이며 다른 방법을 생각할 수 없었습니다).

Windows XP 및 32 비트 버전의 Windows Vista에서는 올바르게 작동합니다. 그러나 x64 Windows Vista에서는 코드가 x64 Program Files 폴더를 반환하는 반면 응용 프로그램은 Program Files x86에 설치됩니다. “C : \ Program Files (x86)”하드 배선없이 프로그래밍 방식으로 Program Files x86의 경로를 반환 할 수있는 방법이 있습니까?



답변

아래 함수 Program Files는이 세 가지 Windows 구성 모두 에서 x86 디렉토리를 반환합니다 .

  • 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");
}


답변

.NET 4를 사용하는 경우 특별한 폴더 열거 형 ProgramFilesX86이 있습니다 .

Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)


답변

Environment.GetEnvironmentVariable("PROGRAMFILES(X86)") ?? Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)


답변

그러나 ProgramFiles(x86)환경 변수는 응용 프로그램이 64 비트를 실행중인 경우에만 사용할 수 있습니다.

응용 프로그램이 32 비트를 실행중인 경우 ProgramFiles실제로 “Program Files (x86)”값을 갖는 환경 변수를 사용할 수 있습니다 .


답변

한 가지 방법은 “ProgramFiles (x86)”환경 변수를 찾는 것입니다.

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


답변

Windows 7 용 x86 및 x64 플랫폼 모두에서 실행할 수있는 응용 프로그램을 작성 중이며 아래 변수를 쿼리하면 모든 플랫폼에서 올바른 프로그램 파일 폴더 경로를 가져옵니다.

Environment.GetEnvironmentVariable("PROGRAMFILES")


답변

.NET의 새로운 방법을 사용하는 원 라이너. 항상 x86 프로그램 파일 폴더를 반환합니다.

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