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?

5
demandé sur Stein Åsmul 2014-08-10 18:15:54

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

12
répondu Stein Åsmul 2017-08-07 16:19:06

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.

0
répondu Mofi 2014-08-10 16:14:01

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.

0
répondu Giuseppe 2017-08-07 15:22:09