5

Ich versuche, eine .bat zum ersten Mal zu schreiben.Batch-Skript zur Installation von MSI

Ich versuche, MSI mit Skript zu installieren, derzeit installieren wir manuell durch Doppelklick darauf.

Pfad von: d:/installed sw/$folder/.msi

Pfad zu: D:/program files/app/

$folder Mitteln, ist es jedes Mal anders, als wir neue msi bekommen zu installieren, die in Ordnern nach aktuellem Datum erstellt vorgesehen sind . Hier

ist das Skript, ich versuche:

@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 

Im Einklang mit set server Ich füge den Weg zu.

SET /P MSI ist für Pfad von.

Es funktioniert jedoch nicht.

Kann mir jemand sagen, welchen Fehler ich mache?

Antwort

11

Dies ist, wie man ein normaler MSI leise Datei zu installieren:

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

Schnell Erklärung:

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

Die msiexec.exe command line ist umfangreich mit Unterstützung für eine Vielzahl von Optionen. Hier ist another overview derselben Befehlszeilenschnittstelle. Hier ist ein annotated versions (wurde gebrochen, über Weg zurück Maschine wiederbelebt).

Es ist auch möglich, eine Batch-Datei viel kürzer mit Konstrukten wie for loops wie hier für Windows-Updates dargestellt.

Wenn es Kontrollkästchen, die während der Installation überprüft werden müssen, können Sie die entsprechenden PUBLIC PROPERTIES das Kontrollkästchen angebracht finden müssen und es in der Befehlszeile wie folgt festgelegt:

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

These Eigenschaften sind in jedem MSI unterschiedlich. Sie können sie über die ausführliche Protokolldatei oder durch Öffnen der MSI in Orca, or another appropriate tool finden. Sie müssen entweder in der Dialogsteuerungssektion oder in der Eigenschaftentabelle nachsehen, wie der Eigenschaftsname lautet. Versuchen Sie, das Setup auszuführen und zuerst eine ausführliche Protokolldatei zu erstellen, und suchen Sie dann im Protokoll nach Nachrichten unter "Einstellung der Eigenschaft ..." und sehen Sie dann, wo sich der Name der Eigenschaft befindet. Fügen Sie dann diese Eigenschaft mit dem Wert aus der Protokolldatei zur Befehlszeile hinzu.

haben auch einen Blick auf, wie Transformationen verwenden, um die MSI über Einstellung Befehlszeilenparameter anpassen: How to make better use of MSI files

+0

Danke. Ich probiere das oben, werde versuchen mit Demo .msi Auch wir klickten 2 Kontrollkästchen während der Installation, wird die stille Installation gonna das auch kümmern? – Aman

+0

Siehe meine Ergänzungen zu der Antwort. Beachten Sie, dass einige MSI-Dateien nicht Standard sind, aber die obige Beschreibung sollte für die meisten korrekt sein. –

0

Hier sind die Batch-Datei, die für Sie arbeiten soll:

@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%" 

Die Zeichen auf aufgelistet Letzte Seite Ausgabe bei der Eingabe in einer Eingabeaufforderung Fenster entweder help cmd oder cmd /? haben besondere Bedeutungen in Batch-Dateien. Hier werden Klammern und eckige Klammern auch in Strings verwendet, in denen diese Zeichen wörtlich interpretiert werden sollen. Daher ist es notwendig, die Zeichenkette entweder in doppelte Anführungszeichen zu setzen oder diese Zeichen mit dem Zeichen ^ zu entschlüsseln, wie es im Code oben zu sehen ist. Andernfalls beendet der Befehlszeileninterpreter die Stapelverarbeitung aufgrund eines Syntaxfehlers.

Und es ist nicht möglich, eine Datei mit der Erweiterung MSI aufzurufen. Eine * .msi-Datei ist keine ausführbare Datei. Wenn Sie auf eine MSI-Datei doppelklicken, sucht Windows in der Registrierung nach, welche Anwendung mit dieser Dateierweiterung zum Öffnen der Aktion verknüpft ist. Und die zu verwendende Anwendung ist msiexec mit der Befehlszeilenoption /i, um die Anwendung in MSI-Paket zu installieren.

Führen Sie msiexec.exe /?, um in einem GUI-Fenster die verfügbaren Optionen zu erhalten, oder sehen Sie sich Msiexec (command-line options) an.

Ich habe bereits /quiet zusätzlich zu Option /i für eine stille Installation hinzugefügt.

Im obigen Stapelcode wird start mit der Option /wait verwendet, um die Windows-Anwendung msiexec.exe zu starten und die Ausführung der Stapeldatei bis zum Abschluss der Installation (oder abgebrochen) zu halten.

0

Obwohl es aus dem Thema heraussehen könnte, kümmerte sich niemand darum, das ERRORLEVEL zu überprüfen. Als ich Ihre Vorschläge verwendet habe, habe ich direkt nach der MSI-Installation nach Fehlern gesucht. Ich habe es absichtlich scheitern lassen und festgestellt, dass alles auf der Kommandozeile wunderbar funktioniert, während in einer Batch-Datei msiexec anscheinend keine Fehler setzt. Versucht, verschiedene Dinge gibt wie

  • Start Verwenden/wait
  • Mit! Error-! Variable statt% Error-%
  • Mit setlocal EnableDelayedExpansion

Nichts funktioniert und was vor allem ärgert mich ist es die Tatsache, dass es in der Kommandozeile arbeitet.

+0

Haben Sie diese Antwort überprüft ?: https://www.experts-exchange.com/questions/27389717/single-advertisement-for-multiple-programs-sccm.html. Überprüfen Sie die "akzeptierte Antwort" im Abschnitt "Invoke MSI". Lassen Sie uns wissen, ob es für Sie funktioniert und wir können die akzeptierte Antwort mit den Informationen erweitern. –

+0

Und noch eins: https://stackoverflow.com/questions/1708481/how-do-i-programmatisch-detect-success-or-failure-when-installing-an-msi –

Verwandte Themen