2010-08-17 4 views
6

У меня есть скрипт сборки, который должен жестко закодировать путь к исполняемому файлу. Путь:Узнайте о «бит» существующей ОС в MSBuild

  • C: \ Program Files \ Microsoft Visual Studio 9.0 \ SmartDevices \ SDK \ SDKTools \ cabwiz.exe

Это работало отлично, но теперь я бегу на 64 бит ОС (но мой коллега и сервер сборки находятся на 32 бит).

мне нужен путь, чтобы быть это для меня:

  • C: \ Program Files (x86) \ Microsoft Visual Studio 9.0 \ SmartDevices \ SDK \ SDKTools \ cabwiz.exe

Но используйте обычный путь для остальных.

Вот как я поставил его:

<PropertyGroup> 
    <CabWiz>"C:\Program Files\Microsoft Visual Studio 9.0\SmartDevices\SDK\SDKTools\cabwiz.exe"</CabWiz> 
</PropertyGroup> 

Есть ли условие я могу поставить на том, чтобы я мог установить его, если ОС (не текущей конфигурации сборки) составляет 64 бит?

ответ

7

Существует раздел реестра, который расскажет вам о разрядности текущей ОС. Вот свойства, которые я использую в моих файлах MSBuild:

<PropertyGroup> 
     <MachineProcessorArchitecture>$(registry:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\[email protected]_ARCHITECTURE)</MachineProcessorArchitecture> 
     <Is32Bit>False</Is32Bit> 
     <Is32Bit Condition="'$(MachineProcessorArchitecture)' == 'x86'">True</Is32Bit> 
     <Is64Bit>False</Is64Bit> 
     <Is64Bit Condition="'$(MachineProcessorArchitecture)' == 'AMD64'">True</Is64Bit> 
</PropertyGroup> 
3

На 64-битных ОС, определены следующие переменные:

ProgramFiles=C:\Program Files 
ProgramFiles(x86)=C:\Program Files (x86) 

Так что тест на ProgramFiles(x86) и если он пуст, используйте ProgramFiles.

1

Если вы всегда используете 32-разрядную версию MSBuild, независимо от платформы, тогда это легко: просто замените «$ (ProgramFiles)» на «C: \ Program Files». Независимо от того, на 32-разрядной или 64-разрядной ОС, «$ (ProgramFiles)» следует расширить до правильного расположения папки (расположение всех 32-разрядных программ).

Если вы используете 64-разрядную версию MSBuild на 64-разрядных платформах (что маловероятно), то это становится немного сложнее. Переменная окружения '% ProgramFiles (x86)%', по-видимому, будет тем, что вы хотите, но удачи, связанной с этими круглыми скобками. Легче было бы использовать переменную среды% PROCESSOR_ARCHITECTURE% в состоянии.

+0

Запуск 64-разрядной версии MSBuild уже не является маловероятным, потому что это по умолчанию для Team Build 2010. См. Комментарии здесь: https://connect.microsoft.com/VisualStudio/feedback/details/591133/msbuild -64-битовые кирки-вверх-в-Wrong-расширения-путь – Mark

3

Вы используете разрядность, чтобы попытаться угадать правильный Program Files папку, но нет никакой гарантии, что он находится на диске C, или даже называется «Программа файлы». Вам лучше использовать свойство $(MSBuildProgramFiles32) (в MSBuild 4.0).