Давайте рассмотрим следующий скрипт на Perl:
#!/usr/bin/perl
system("C:/Program Files (x86)/Microsoft Visual Studio/2017/Enterprise/Common7/Tools/VsDevCmd.bat");
system("msbuild");
Пакетный файл, вызванный первым вызовом system
, должен установить некоторые переменные среды, чтобы можно было найти исполняемый файл msbuild во втором вызове system
.
Когда я запускаю этот Perl-скрипт, я получаю следующую ошибку:
msbuild не распознается как внутренняя или внешняя команда,
работающая программа или командный файл.
Таким образом, похоже, что переменные среды, установленные в пакетном файле, не доступны для контекста сценария perl. Что я могу сделать, чтобы сделать эту работу?
Примечание 1
Запуск сначала командного файла из окна консоли, а затем запуск msbuild
работает нормально. Таким образом, пакетный файл работает, как ожидалось, и msbuild фактически доступен.
Примечание 2
Мой реальный скрипт на Perl намного длиннее. Этот пример представляет собой огромное упрощение, которое позволяет воспроизвести проблему. Поэтому я не могу легко заменить Perl-скрипт на командный файл, например.
Примечание 3
Самое смешное: я использую этот Perl-скрипт без проблем один или два года. И вдруг он перестал работать.