Как получить доступ к переменной среды ProgramFiles из nmake на машинах x64? - PullRequest
3 голосов
/ 25 июля 2010

Я пытаюсь получить путь к переменной окружения ProgramFiles, которая должна расшириться до C:\Program Files (x86) на машине x64 и до C:\Program Files на машине x86.

Проблема в том, что в файле nmake, если я делаю:

 all:
      echo $(PROGRAMFILES)

Это будет расширяться до C:\Program Files каждый раз, и это неправильно.

Сведения об окружении с машины x64:

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

:: this one is special, if will return different results based on current process x86/x64
ProgramFiles=C:\Program Files (x86) or C:\Program Files
PROCESSOR_ARCHITECTURE=x86 or x64

Теперь обновленный вопрос как получить расположение программных файлов x86 внутри nmake, таким образом, это будет работать как на машинах x86, так и на x64 ?

Ответы [ 2 ]

2 голосов
/ 29 ноября 2012

Это выражение работает на 64-битной Windows 7, с nmake, работающим как в 32-битной, так и в 64-битной:

%%PROGRAMFILES(x86)%%

, например

LC = %%PROGRAMFILES(x86)%%\Microsoft SDKs\Windows\v7.0A\bin\lc.exe
1 голос
/ 25 июля 2010

Если вы работаете на компьютере x64, то вполне законно, что %ProgramFiles% указывает на C:\Program Files - из среды 64-битной программы. Переменная, которую вы должны использовать, чтобы получить аналог x86: %ProgramFiles(x86)%.

Какой использовать, можно определить, оценивая архитектуру текущей ОС, которая установлена ​​в переменной окружения PROCESSOR_ARCHITECTURE (например, в AMD64). Или просто попробуйте получить %ProgramFiles(x86)% и, если оно пустое, получите содержимое %ProgramFiles%.

Другой подход - запустить 32-битный cmd.exe и запустить там свою сборку. Он расположен в C:\Windows\SysWOW64.

...