2009-06-25 14 views
15

Tengo un archivo de proceso por lotes que detectará si el usuario tiene el .NET Framework instalado yendo al directorio y verificando si existe el directorio CONFIG.archivo de proceso por lotes para esperar a que se complete una instalación antes de pasar a la siguiente línea

Si el directorio no existe, entonces el usuario no tiene instalado .Net framework. El archivo por lotes continuará para instalar .Net framework. Sin embargo, existe un problema ya que los frameworks .Net deben ser instalados antes de ejecutar la configuración para instalar mi marcador. Así que he puesto una declaración PAUSE para que el usuario presione cualquier botón para continuar después de que se haya instalado el marco.

Sin embargo, a nuestro cliente no le gusta esto ya que algunos de sus clientes no entienden y presionan una tecla antes de que el marco haya terminado de instalarse. Esto hace que la instalación falle ya que el framework no se ha instalado primero.

Estoy usando la PAUSA que esperará la entrada del usuario. Sin embargo, ¿hay alguna manera de que el lote espere hasta que el marco se termine automáticamente en lugar de usar el comando PAUSE?

Muchas gracias por todas las sugerencias,

@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 

Respuesta

12

puede utilizar

START /WAIT NetFx20SP2_x86 

también. recordar que

REM comment 

es igual a

::comment 

y que usar. \ Es innecesaria, y extensiones de archivo son también, a menos que haya directorios/archivos con nombres conflictivos. También no es necesario limpiar el "nombre de archivo" variable de dos veces (el "=" apuntando nada dos veces) y

ECHO.something 

es igual

ECHO something 

única excepción de las líneas en blanco

+0

Hola, todas las soluciones aquí funcionan. Sin embargo, me pregunto qué significa la barra invertida frente al comando WAIT, es decir,/WAIT – ant2009

+0

. Me lo estoy preguntando. Se tarda unos 5 minutos en instalar el marco, si el usuario cancela durante el progreso. ¿Hay alguna manera de salir del archivo por lotes? Cuando probé la instalación se ejecutó y luego falló porque el usuario canceló la instalación del marco. Gracias – ant2009

+0

"help start" en la línea de comando le dirá lo que hace/WAIT: "Inicie la aplicación y espere a que termine". Es una barra diagonal o solidus, por cierto, no una barra invertida. – Joey

2

Basta con retirar la línea de salida de la llamada, así:

.\NetFx20SP2_x86.exe 
Start .\setup.exe 

Esto hará que el bloqueo de la instalación, como en el archivo por lotes se detendrá procesamiento hasta que el programa NetFx20SP2_x86.exe finaliza.

3

también se podría utilizar

START /WAIT NetFx20SP2_x86.exe 

la barra es para indicar que se trata de una opción para el comando de inicio, no el archivo de destino. para ver más de estas opciones, mira here (Me refiero a ella como una 'barra inclinada')

2

I Ok optimizado la secuencia de comandos, más o menos:

@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: Como solo usa el archivo CONFIG como propósito de prueba una vez, usar una variable es inútil. además, el signo "=" debe estar pegado al nombre de la variable; de ​​lo contrario, creará una variable con un espacio en ella."set filename =" y "set filename =" son dos cosas diferentes. Sí, un nombre de variable puede contener palabras y espacios múltiples, pero hay que ser extremadamente prudente al respecto, puede ser difícil de manejar.

2: No recomendaría usar '::' como comentario, disculpe Camilo, porque no funciona bien entre paréntesis. Lo haría aquí, pero si realiza esta ruta para todos sus lotes, podría entrar en un problema más adelante y se preguntará por qué su código se rompe si no lo sabe.

3: No es necesario poner fin a una secuencia de comandos con salida, ni restablecer a de eco en, cuando un script llega al final, se hace eco de restablecer el estado y la salida por sí mismo.

Espero que esto ayude.

Cuestiones relacionadas