Как получить путь к программным файлам независимо от архитектуры целевой машины

17

Я программирую в C # /. NET. Я хочу, чтобы иметь возможность вернуть каталог программных файлов с целевой машины независимо от архитектуры целевой машины. Чтобы уточнить, я хочу, чтобы он возвращал C (or whatever drive the OS is on):/Program Files независимо от того, какой биттой их версия Windows.

Я мог бы просто жестко закодировать в каталоге, кроме случаев, когда пользователь запускал Windows, которая не установлена ​​на диске C: это не сработает.

Я нашел

FileInfo(System.Environment.GetFolderPath(System.Environment.SpecialFolder.ProgramFiles) 

, но я думаю, что он возвращает папку Program Files (x86) на 64-битной машине Windows.

    
задан PICyourBrain 17.02.2010 в 23:01
источник
  • Я думаю, что один из этих «C: / Program Files» должен быть неправильным. –  Mark Byers 17.02.2010 в 23:04
  • См. stackoverflow.com/questions/194157/... –  adrianbanks 17.02.2010 в 23:08

1 ответ

29

System.Environment.GetFolderPath(System.Environment.SpecialFolder.ProgramFiles) возвращает "c:\Program Files" на 64-битной машине, если только код не создан для целевой x86, и в этом случае он возвращает "C:\Program Files (x86)" , поэтому, я думаю, это сработает для вас.

    
ответ дан Fredrik Mörk 17.02.2010 в 23:06
  • Что делать, если целевая платформа настроена на любой процессор? –  PICyourBrain 17.02.2010 в 23:07
  • Если я скомпилирую код с использованием любого процессора на своем 64-битном компьютере, он вернет «C: \ Program Files» (проверено его только сейчас). –  Fredrik Mörk 17.02.2010 в 23:08
  • Я тоже сделал, и он возвращает Program Files (x86) на моем ... –  PICyourBrain 17.02.2010 в 23:23
  • @PICyourBrain: Может быть, ваше приложение имеет 32-битный компонент, который запустит его в 32-битном режиме при компиляции с любым процессором –  Vlad 11.09.2013 в 15:59