В поисках лучшего способа установки переменных среды Windows из пакетного файла после установки программного обеспечения - PullRequest
0 голосов
/ 20 апреля 2019

Я создаю скрипт Windows .bat для автоматической компиляции и установки инструментария Geant4 из CERN (но мои следующие вопросы не зависят от того, с каким программным обеспечением я хочу иметь дело).То, что мне удалось сделать до сих пор, похоже, работает нормально, но меня не устраивает то, как переменные среды устанавливаются в конце скрипта.

Чтобы завершить установку, мне нужно настроить средупеременные, чтобы указать путь к требуемым наборам данных, и C ++ включают в себя и каталоги библиотек (я решил изменить переменную «PATH» для этих последних).Я хочу настроить их для текущего сценария (с помощью команды set) и для следующих исполнений (с помощью команды setx)

Сценарий, который я сейчас использую для этого, следующий:

REM to get the path to directory where this bat file is executed from.
set G4_bat_file_dir=%~dp0

REM set the environement variables for next cmd runs

REM adding to local (temporary) PATH
set G4dataset_RootDir="%G4_bat_file_dir%\install\share\Geant4-10.4.3\data\"

REM adding environment variables for current and next cmd executions
setx G4dataset_RootDir "%G4_bat_file_dir%\install\share\Geant4-10.4.3\data\"

setx G4ABLADATA %G4dataset_RootDir%\G4ABLA3.1
setx G4ENSDFSTATEDATA %G4dataset_RootDir%\G4ENSDFSTATE2.2
setx G4LEDATA %G4dataset_RootDir%\G4EMLOW7.3
setx G4LEVELGAMMADATA %G4dataset_RootDir%\PhotonEvaporation5.2
setx G4NEUTRONHPDATA %G4dataset_RootDir%\G4NDL4.5
setx G4NEUTRONXSDATA %G4dataset_RootDir%\G4NEUTRONXS1.4
setx G4PIIDATA %G4dataset_RootDir%\G4PII1.3
setx G4RADIOACTIVEDATA %G4dataset_RootDir%\RadioactiveDecay5.2
setx G4REALSURFACEDATA %G4dataset_RootDir%\RealSurface2.1.1
setx G4SAIDXSDATA %G4dataset_RootDir%\G4SAIDDATA1.1

set G4ABLADATA=%G4dataset_RootDir%\G4ABLA3.1
set G4ENSDFSTATEDATA=%G4dataset_RootDir%\G4ENSDFSTATE2.2
set G4LEDATA=%G4dataset_RootDir%\G4EMLOW7.3
set G4LEVELGAMMADATA=%G4dataset_RootDir%\PhotonEvaporation5.2
set G4NEUTRONHPDATA=%G4dataset_RootDir%\G4NDL4.5
set G4NEUTRONXSDATA=%G4dataset_RootDir%\G4NEUTRONXS1.4
set G4PIIDATA=%G4dataset_RootDir%\G4PII1.3
set G4RADIOACTIVEDATA=%G4dataset_RootDir%\RadioactiveDecay5.2
set G4REALSURFACEDATA=%G4dataset_RootDir%\RealSurface2.1.1
set G4SAIDXSDATA=%G4dataset_RootDir%\G4SAIDDATA1.1

setx Geant4_DIR %G4_bat_file_dir%\install\lib\Geant4-10.4.3\

REM adding to PATH the paths to libraries and includes for Qt4 and Geant4.

setx PATH "%G4_bat_file_dir%\install\lib;%G4_bat_file_dir%\install\bin;%G4_bat_file_dir%\xerces-c\instal\bin;%G4_bat_file_dir%\xerces-c\instal\lib;%G4_bat_file_dir%Qt4\install\bin;%G4_bat_file_dir%Qt4\install\lib;%PATH%"

Я хочу добавить пути %G4_bat_file_dir%\install\lib;%G4_bat_file_dir%\install\bin;%G4_bat_file_dir%\xerces-c\instal\bin;%G4_bat_file_dir%\xerces-c\instal\lib;%G4_bat_file_dir%Qt4\install\bin;%G4_bat_file_dir%Qt4\install\lib.

Это скриншот установки переменных среды, которую я получаю после запуска сценария 2 раза:

http://djienne.free.fr/env.png

Это далеко от идеала, есть несколько вещей, которые меня не устраивают:

  • все пути в переменных полностью расходуются, изатем переменная PATH становится слишком длинной, и я получаю сообщение об ошибке «ПРЕДУПРЕЖДЕНИЕ. Сохраняемые данные усекаются до 1024 символов».

  • Если я запускаю сценарий дважды подряд, онвыдает дубликаты в записях PATH (и все, что превышает ограничение в 1024 символа, усекается)

  • также, если я добавлю этот код в конец основного сценария компиляции / установки, он выдаст ошибку'setx' is not recognized as an internal or external command, operable program or batch file. и так переменные средыне создаются / не изменяютсяНо если я запускаю этот скрипт как отдельный файл .bat, он работает.Так что есть кое-что, чего я не понимаю.(Я уточняю, что всегда запускаю сценарии как «администратор».)

Заранее благодарен за помощь.

1 Ответ

0 голосов
/ 01 мая 2019

Следуя советам из комментариев, я создал пакетный скрипт launch_visual_studio.bat на верхнем уровне своего проекта, чтобы запустить Visual Studio с обновленным локальным PATH. Файл содержит код:

@echo off

REM Set the environment

set G4_bat_file_dir=%~dp0

set QTDIR=%G4_bat_file_dir%Qt5\qt-5.6.3\

set QMAKESPEC=win32-msvc2015

set Geant4_DIR=%G4_bat_file_dir%install\lib\Geant4-10.4.3\

REM split into two parts for readability
set PATH=%PATH%;%G4_bat_file_dir%install\bin;%G4_bat_file_dir%install\lib;%G4_bat_file_dir%install\include\Geant4
set PATH=%PATH%;%QTDIR%lib;%QTDIR%bin;%QTDIR%include

REM launch visual studio

"%vs140comntools%..\IDE\devenv.exe"

Это работает для visual studio 2015, но будет отличаться для других версий.

Для переменных окружения, отличных от PATH, QTDIR и Geant4_DIR, так как они имеют очень специфические имена (G4ABLADATA, G4ENSDFSTATEDATA, ...), кажется правильным установить их постоянно, используя setx, как показано ранее.

...