Script de traitement par lots pour l'installation de MSI
j'essaie d'écrire un .chauve-souris pour la première fois.
j'essaie d'installer .MSI utilisant script, actuellement nous installons manuellement en double cliquant dessus.
chemin de : d:/installed sw/$folder/.msi
chemin vers : D:/program files/app/
$folder
signifie, Il est différent chaque fois, que nous obtenons de nouveaux msi à installer ce qui sont fournis dans le dossier créé par date courante.
voici le script que j'essaie:
@echo off
Title HOST: Installing Updates on %computername%
echo %computername%
set server=SERVERNAME or PATHmsifolder
: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
dans la ligne de set server
j'ajoute le chemin à .
SET /P MSI
est pour chemin de .
cependant, il ne fonctionne pas.
est-ce que quelqu'un peut me guider quelle erreur je fais?
3 réponses
voici comment installer un fichier MSI normal en silence :
msiexec.exe /i c:\setup.msi /QN /L*V "C:\Temp\msilog.log"
Brève Explication:
/L*V "C:\Temp\msilog.log"= verbose logging
/QN = run completely silently
/i = run install sequence
Le msiexec.exe ligne de commande est vaste avec le soutien d'une variété d'options. Voici un autre aperçu de la même interface de ligne de commande. Voici un versions annotées (a été brisée, ressuscité par machine).
il est également possible de faire un fichier de lot beaucoup plus court avec des constructions telles que pour les boucles comme illustré ici pour les mises à jour de Windows.
S'il y a des cases à cocher qui doivent être cochées pendant la configuration, vous devez trouver le approprié 1519310920 "propriétés publiques "1519130920 attaché à la case à la ligne de commande comme ceci:
msiexec.exe /i c:\setup.msi /QN /L*V "C:\Temp\msilog.log" STARTAPP=1 SHOWHELP=Yes
ces propriétés sont différentes dans chaque MSI. Vous pouvez les trouver via le verbose log file ou en ouvrant le MSI dans Orca, ou un autre outil approprié . Vous devez regarder dans la section de contrôle de dialogue ou dans la table de propriété pour savoir quel est le nom de la propriété. Essayez d'exécuter la configuration et de créer un fichier de log verbose d'abord, puis la recherche le journal des messages ala "Paramètre de la propriété..."et puis voir ce que le nom de la propriété est là. Puis ajouter cette propriété avec la valeur dans le fichier journal à la ligne de commande.
ont également un regard sur la façon d'utiliser les transformées pour personnaliser le MSI au-delà de paramètres de ligne de commande: Comment faire un meilleur usage des fichiers MSI
voici le fichier de lot qui devrait fonctionner pour vous:
@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%"
les caractères énumérés sur la sortie de la dernière page à l'entrée dans une fenêtre d'invite de commande soit help cmd
ou cmd /?
ont des significations spéciales dans les fichiers de lot. Ici sont utilisés les parenthèses et les crochets aussi dans les chaînes où ces caractères doivent être interprétés littéralement. Par conséquent, il est nécessaire de placer la chaîne de caractères entre guillemets ou d'échapper à ces caractères Avec caractère ^
comme on peut le voir dans le code ci-dessus, sinon l'interpréteur en ligne de commande cesse l'exécution par lots à cause d'une erreur de syntaxe.
et il n'est pas possible d'appeler un fichier avec extension MSI. Un.* fichier msi n'est pas un exécutable. En double cliquant sur un fichier MSI, Windows cherche dans le registre quelle application est associée à cette extension de fichier pour l'action d'ouverture. Et l'application à utiliser est msiexec
avec l'option de ligne de commande /i
pour installer le application à l'intérieur du paquet MSI.
Exécuter msiexec.exe /?
pour obtenir dans une fenêtre GUI options disponibles ou regarder Msiexec (options de ligne de commande) .
j'ai déjà ajouté /quiet
en plus de l'option requise /i
pour une installation silencieuse.
dans le code de lot au-dessus de la commande start
est utilisé avec l'option /wait
pour démarrer L'application Windows msiexec.exe
et maintenir exécution du fichier batch jusqu'à la fin (ou l'abandon) de l'installation.
bien qu'il puisse sembler hors sujet personne n'a pris la peine de vérifier le niveau D'erreur. Lorsque j'ai utilisé vos suggestions, j'ai essayé de vérifier les erreurs immédiatement après l'installation de MSI. Je l'ai fait échouer exprès et j'ai remarqué que sur la ligne de commande tout fonctionne à merveille alors que dans un fichier batch msiexec dosn ne semble pas définir des erreurs. Essayé différentes choses comme
- utilisant start / wait
- à l'Aide !ERRORLEVEL! variable au lieu de %ERRORLEVEL%
- À L'Aide De SetLocal EnableDelayedExpansion
rien ne fonctionne et ce qui m'ennuie le plus c'est le fait qu'il fonctionne en ligne de commande.