пакетный файл, чтобы дождаться завершения установки, прежде чем перейти к следующей строке - PullRequest
15 голосов
/ 25 июня 2009

У меня есть пакетный файл, который будет определять, установлен ли пользователь .Net Framework, перейдя в каталог и проверив, существует ли каталог CONFIG.

Если каталог не существует, то у пользователя не установлена ​​платформа .Net. Пакетный файл затем продолжит установку .Net Framework. Однако есть проблема, так как .Net Framework необходимо установить перед запуском установки, чтобы установить мою звонилку. Поэтому я поместил оператор PAUSE, чтобы пользователь нажимал любую кнопку для продолжения после установки инфраструктуры.

Однако нашему клиенту это не нравится, так как некоторые из его клиентов не понимают, и они нажимают клавишу до того, как фреймворк завершит установку. Это приводит к сбою установки, так как фреймворк не был установлен первым.

Я использую ПАУЗУ, которая будет ждать ввода пользователя. Однако существует ли способ, при котором пакет будет ожидать автоматического завершения структуры вместо использования команды PAUSE?

Большое спасибо за любые предложения,

@ECHO OFF
REM Copy the configuration file
copy config.xml "%AppData%\DataLinks.xml"

REM Search for the CONFIG file, if this doesn't exit then the user doesn't have the .Net framework 2.0
SET FileName=%windir%\Microsoft.NET\Framework\v2.0.50727\CONFIG
IF EXIST %FileName% GOTO INSTALL_DIALER
ECHO.You currently do not have the Microsoft(c) .NET Framework 2.0 installed.
ECHO.This is required by the setup program for MyApplication.
ECHO.
ECHO.The Microsoft(c) .NET Framework 2.0 will now be installed on you system.
ECHO.After completion setup will continue to install MyApplication on your system.
ECHO.
REM Install the .Net framework and wait for the user to input before install the dialer 
PAUSE
ECHO Installing... Please wait...
SET FileName =
Start .\NetFx20SP2_x86.exe
ECHO Once the .Net Framework has completed. Press any key to continue to install the dialer.
PAUSE
Start .\setup.exe
ECHO ON
EXIT

REM .Net framework has been skipped contine to install the dialer.
:INSTALL_DIALER
ECHO *** Skiped Dotnet Framework 2.0.50727 ***
ECHO Installing... Please wait...
SET FileName=
Start .\setup.exe
ECHO ON
EXIT

Ответы [ 4 ]

12 голосов
/ 25 июня 2009

вы можете использовать

START /WAIT NetFx20SP2_x86

тоже. помните, что

REM comment

равно

::comment

, и использование. \ Не является необходимым, и расширения файлов тоже, если есть каталоги / файлы с конфликтующими именами. Вам также не нужно очищать переменную «filename» дважды («=» ничего не указывает дважды) и

ECHO.something

равно

ECHO something

только за исключением пустых строк

3 голосов
/ 25 июня 2009

Вы также можете использовать

 START /WAIT NetFx20SP2_x86.exe

косая черта означает, что это опция команды запуска, а не целевой файл. чтобы увидеть больше этих опций, посмотрите здесь (я бы назвал его «слеш»)

2 голосов
/ 18 августа 2009

Хорошо, я оптимизировал ваш скрипт, вроде:

@echo off
rem Copy the configuration file
copy config.xml "%AppData%\DataLinks.xml"

rem Search for the CONFIG file, if this doesn't exist then the user doesn't have the .Net framework 2.0
if not exist "%windir%\Microsoft.NET\Framework\v2.0.50727\CONFIG" (
    echo You currently do not have the Microsoft(c) .NET Framework 2.0 installed.
    echo This is required by the setup program for MyApplication.
    echo.
    echo The Microsoft(c) .NET Framework 2.0 will now be installed on you system.
    echo After completion setup will continue to install MyApplication on your system.
    echo.
    Start /w .\NetFx20SP2_x86.exe
)
Start /w .\setup.exe

1: Поскольку файл CONFIG используется только для целей тестирования, использование переменной для него бесполезно. Более того, знак «=» должен быть привязан к имени переменной, в противном случае вы создадите переменную с пробелом в нем. "set filename =" и "set filename =" - это две разные вещи. Да, имя переменной может содержать несколько слов и пробелов, но с этим нужно быть крайне осторожным, с ним может быть трудно справиться.

2: Я бы не рекомендовал использовать '::' в качестве комментария, извините, Камило, потому что он не очень хорошо работает в скобках. Это было бы здесь, но если вы возьмете этот трек для всех своих партий, вы можете столкнуться с проблемой позже, и вы удивитесь, почему ваш код не работает, если вы этого не знаете.

3: Вам не нужно заканчивать сценарий с помощью exit и не сбрасывать до echo на , когда сценарий достигает конца, сбросьте состояние эха и выйдите самостоятельно.

Надеюсь, это поможет.

2 голосов
/ 25 июня 2009

Просто удалите строку СТАРТ из звонка, вот так:

.\NetFx20SP2_x86.exe
Start .\setup.exe

Это сделает блокировку установки, так как в пакетном файле остановится обработка, пока программа NetFx20SP2_x86.exe не завершится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...