Мое решение состоит в том, чтобы посмотреть, существует ли "c:\program files (x86)", если это существует, предположите, что это - OS на 64 бита. Иначе используйте нормальный каталог программных файлов:
<PropertyGroup>
<ProgramFiles32 Condition="Exists('$(PROGRAMFILES) (x86)')">$(PROGRAMFILES) (x86)</ProgramFiles32>
<ProgramFiles32 Condition="$(ProgramFiles32) == ''">$(PROGRAMFILES)</ProgramFiles32>
</PropertyGroup>
я могу использовать его как это
<Exec WorkingDirectory="src\app1" Command='"$(ProgramFiles32)\doxygen\bin\doxygen" Doxyfile' />
Я думаю, что немного более надежный путь состоит в том, чтобы захватить Переменную среды "ProgramFiles (x86)". В процессе на 64 бита в Windows это укажет на 32 каталога файлов битной программы. Это будет пусто на версии на 32 бита окон, и я верю на процессе wow64
, я недавно столкнулся фактически с той же проблемой с некоторыми сценариями PowerShell. Я записал запись в блоге о том, как обработанное вокруг каталога программных файлов выходит. Различный язык, очевидно, но это может выручить Вас.
http://blogs.msdn.com/jaredpar/archive/2008/10/21/program-files-i-just-want-the-32-bit-version.aspx
Я наткнулся на этот вопрос, пытаясь найти общий способ в MSbuild, чтобы узнать, 32- или 64-разрядная это ОС. На случай, если кто-то еще найдет это, я использовал следующее:
<PropertyGroup>
<OSBits Condition="$(ProgramW6432) != ''">x64</OSBits>
<OSBits Condition="$(OSBits) == ''">x32</OSBits>
</PropertyGroup>
Очевидно % ProgramW6432%
установлен только в 64-битных системах.