WOW64: получить x64 %CommonProgramFiles% из 32-битного процесса

Запросы, которые я пробовал: ExpandEnvironmentStrings("%COMMONPROGRAMFILES%"), GetSpecialPath(CSIDL_PROGRAM_FILES_COMMON).

Все решают (обычно) c:\\Program Files (x86)\\Common Files из моего 32-битного приложения. Мне нужно проверить версию файла, установленную (обычно) под c:\\Program Files\\Common Files 64-битного приложения.


person peterchen    schedule 29.03.2010    source источник


Ответы (3)


В 64-разрядных операционных системах переменная среды ProgramW6432 указывает на c:\program files. Полный список 32-разрядных приложений в английской версии Windows:

  • ProgramFiles => c:\program files (x86)
  • ProgramFiles(x86) => c:\program files (x86)
  • ProgramW6432 => c:\program files
  • CommonProgramFiles => c:\program files (x86)\common files
  • CommonProgramFiles(x86) => c:\program files (x86)\common files
  • CommonProgramW6432 => c:\program files\common files

Напоминаем: в этой папке не должно быть ничего интересного для 32-битной программы. Технически. Остерегайтесь редиректора файловой системы, он будет перенаправлять запросы файлов из c:\program files в c:\program files (x86). Вам придется использовать Wow64DisableWow64FsRedirection(), если вы действительно хотите получить доступ к файлам в этом каталоге.

person Hans Passant    schedule 29.03.2010
comment
Я просто проверяю, что необходимое (64-разрядное) приложение уже установлено. - person peterchen; 30.03.2010

%CommonProgramW6432%

person Kyle Alons    schedule 29.03.2010
comment
Спасибо! Как-то я пропустил это в списке переменных env. - person peterchen; 30.03.2010

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

            return Environment.GetEnvironmentVariable("ProgramFiles");
        }

Это то, что вам нужно?

person Art W    schedule 29.03.2010
comment
Это точно не похоже на С++. Может быть, С++/CLI, но я бы поспорил, что С# угадал. - person Billy ONeal; 30.03.2010
comment
Я мог бы поклясться, что видел C# в тегах. Прости. - person Art W; 30.03.2010