2010-03-29 8 views
7

Запросы, которые я пробовал: ExpandEnvironmentStrings("%COMMONPROGRAMFILES%"), GetSpecialPath(CSIDL_PROGRAM_FILES_COMMON).WOW64: получить x64% CommonProgramFiles% от 32-битного процесса

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

ответ

15

На 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(), если вы действительно хотели получить доступ к файлам в этом каталоге.

+0

Я просто проверяю, что необходимое (64-битное) приложение уже установлено. – peterchen

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

      return Environment.GetEnvironmentVariable("ProgramFiles"); 
     } 

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

+0

Это не похоже на C++. Возможно, C++/CLI, но я бы поставил на C#, чтобы угадать. –

+0

Я мог бы поклясться, что видел C# на бирках. Сожалею. –

5

% CommonProgramW6432%

+0

Спасибо! Как-то я пропустил это в списке переменных env. – peterchen