2014-08-10 23 views
5

Sto provando a scrivere un .bat per la prima volta.Script batch per installare MSI

Sto cercando di installare .msi usando lo script, attualmente stiamo installando manualmente facendo doppio clic su di esso.

Percorso da: d:/installed sw/$folder/.msi

Path to: D:/program files/app/

$folder mezzi, è diverso ogni volta, come stiamo ottenendo nuovo MSI per installare che sono forniti nella cartella creata in base alla data corrente .

Ecco lo script che sto cercando:

@echo off 
Title HOST: Installing Updates on %computername% 
echo %computername% 
set server=\\SERVERNAME or PATH\msifolder 
:select 
cls 
echo Select one of the Following MSI Install Folders for installation task. 
echo. 
dir %server% /A:D /B 
SET /P MSI=Please enter the MSI Folder to install: 
SET source=%server%\%MSI% 
echo Selected Installation %MSI% 
echo. 
echo. 

:verify 
ECHO Is This Correct? 
echo. 
echo. 
ECHO 0: ABORT INSTALL 
ECHO 1: YES 
ECHO 2: NO,RE-SELECT 
SET /p choice=Select YES, NO or ABORT? [0,1,2]: 
    if /i [%choice%]==[0] endlocal&goto end 
    if [%choice%]==[] goto BCurrentlocal 
    if [%choice%]==[1] goto yes 
if [%choice%]==[2] goto no 
endlocal 

:no 
goto select 
:yes 
set FILENAME=%MSI% 
call %source%\%FILENAME%.msi 
echo beginning %MSI% installation 
pause 
echo Exiting Install Script.... 
PING -n 4 127.0.0.1 >nul 
exit 

In linea con set server sto aggiungendo il percorso -.

SET /P MSI è per il percorso da.

Tuttavia, non funziona.

Qualcuno può guidarmi che errore sto facendo?

risposta

11

Questo è il modo per installare il file in silenzio un normale MSI:

msiexec.exe /i c:\setup.msi /QN /L*V "C:\Temp\msilog.log" 

spiegazione rapida:

/L*V "C:\Temp\msilog.log"= verbose logging 
/QN = run completely silently 
/i = run install sequence 

Il msiexec.exe command line è ampia, con il supporto per una varietà di opzioni. Ecco another overview della stessa interfaccia della riga di comando. Ecco un annotated versions (era rotto, risuscitato tramite macchina di ritorno).

È inoltre possibile impostare un file batch molto più breve con costrutti come for loops come illustrato qui per gli aggiornamenti di Windows.

Se ci sono caselle di controllo che devono essere controllati durante l'installazione, è necessario trovare il giusto PUBLIC PROPERTIES attaccato alla casella di controllo e imposta dalla riga di comando in questo modo:

msiexec.exe /i c:\setup.msi /QN /L*V "C:\Temp\msilog.log" STARTAPP=1 SHOWHELP=Yes 

Questi le proprietà sono diverse in ogni MSI. È possibile trovarli tramite il file di registro dettagliato o aprendo l'MSI in Orca, or another appropriate tool. È necessario cercare nella sezione di controllo della finestra di dialogo o nella tabella delle proprietà per quale sia il nome della proprietà. Prova a eseguire la configurazione e crea prima un file di registro dettagliato, quindi cerca nel registro i messaggi ala "Impostazione proprietà ..." e poi guarda quale sia il nome della proprietà. Quindi aggiungere questa proprietà con il valore dal file di registro alla riga di comando.

hanno anche uno sguardo a come utilizzare le trasformazioni per personalizzare il MSI di là di impostare i parametri della riga di comando: How to make better use of MSI files

+0

Grazie. Sto provando quanto sopra, proverò con la demo .msi Inoltre, abbiamo usato 2 caselle di controllo durante l'installazione, l'installazione silenziosa si occuperà anche di questo? – Aman

+0

Vedere le mie aggiunte alla risposta. Si noti che alcuni file MSI non sono standard, ma la descrizione precedente dovrebbe essere accurata per la maggior parte. –

0

Ecco il file batch che dovrebbe funzionare per voi:

@echo off 
Title HOST: Installing updates on %computername% 
echo %computername% 
set Server=\\SERVERNAME or PATH\msifolder 

:select 
cls 
echo Select one of the following MSI install folders for installation task. 
echo. 
dir "%Server%" /AD /ON /B 
echo. 
set /P "MSI=Please enter the MSI folder to install: " 
set "Package=%Server%\%MSI%\%MSI%.msi" 

if not exist "%Package%" (
    echo. 
    echo The entered folder/MSI file does not exist ^(typing mistake^). 
    echo. 
    setlocal EnableDelayedExpansion 
    set /P "Retry=Try again [Y/N]: " 
    if /I "!Retry!"=="Y" endlocal & goto select 
    endlocal 
    goto :EOF 
) 

echo. 
echo Selected installation: %MSI% 
echo. 
echo. 

:verify 
echo Is This Correct? 
echo. 
echo. 
echo 0: ABORT INSTALL 
echo 1: YES 
echo 2: NO, RE-SELECT 
echo. 
set /p "choice=Select YES, NO or ABORT? [0,1,2]: " 
if [%choice%]==[0] goto :EOF 
if [%choice%]==[1] goto yes 
goto select 

:yes 
echo. 
echo Running %MSI% installation ... 
start "Install MSI" /wait "%SystemRoot%\system32\msiexec.exe" /i /quiet "%Package%" 

I caratteri quotata l'output dell'ultima pagina all'immissione in una finestra del prompt dei comandi o help cmd o cmd /? ha significati speciali nei file batch. Qui vengono utilizzate parentesi e parentesi quadre anche in stringhe in cui questi caratteri devono essere interpretati letteralmente. Pertanto è necessario racchiudere la stringa tra virgolette o sfuggire a quei caratteri con il carattere ^ come si può vedere nel codice sopra, altrimenti l'interprete della riga di comando esce dall'esecuzione batch a causa di un errore di sintassi.

E non è possibile chiamare un file con estensione MSI. Un file * .msi non è un eseguibile. Facendo doppio clic su un file MSI, Windows cerca nel registro quale applicazione è associata a questa estensione per l'azione di apertura. E l'applicazione da utilizzare è msiexec con l'opzione della riga di comando /i per installare l'applicazione all'interno del pacchetto MSI.

Eseguire msiexec.exe /? per accedere a una finestra della GUI le opzioni disponibili oppure consultare Msiexec (command-line options).

Ho aggiunto già /quiet in aggiunta all'opzione richiesta /i per un'installazione invisibile.

Nel codice batch sopra il comando start viene utilizzato con l'opzione /wait per avviare l'applicazione di Windows msiexec.exe e mantenere l'esecuzione del file batch fino al termine dell'installazione (o interrotta).

0

Anche se potrebbe sembrare fuori tema nessuno si è preso la briga di controllare ERRORLEVEL. Quando ho usato i tuoi suggerimenti ho cercato di verificare gli errori subito dopo l'installazione di MSI. Ho fatto fallire di proposito e ho notato che sulla riga di comando tutto funziona magnificamente mentre in un file batch msiexec non sembra impostare errori. Ho provato diverse cose lì come

  • Utilizzando start/wait
  • Utilizzando! ERRORLEVEL! variabile anziché% ERRORLEVEL%
  • Utilizzando setlocal enabledelayedexpansion

Nulla funziona e ciò che per lo più mi infastidisce è il fatto che funziona nella riga di comando.

+0

Hai controllato questa risposta ?: https://www.experts-exchange.com/questions/27389717/single-advertisement-for-multiple-programs-sccm.html. Controlla la "risposta accettata" nella sezione "Richiama MSI". Facci sapere se funziona per te e possiamo estendere la risposta accettata con le informazioni. –

+0

E ancora: https://stackoverflow.com/questions/1708481/how-do-i-programmatically-detect-success-or-failure-when-installing-an-msi –