web-dev-qa-db-fra.com

Script batch pour installer MSI

J'essaie d'écrire un . Bat pour la première fois.

J'essaie d'installer .msi en utilisant un script, actuellement nous installons manuellement en double-cliquant dessus.

Chemin depuis : d:/installed sw/$folder/.msi

Chemin vers : D:/program files/app/

$folder signifie, c'est différent à chaque fois, car nous obtenons de nouveaux msi à installer qui sont fournis dans le dossier créé par la date actuelle.

Voici le script que j'essaie:

@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

En ligne avec set server J'ajoute le chemin à .

SET /P MSI est pour le chemin de .

Cependant, cela ne fonctionne pas.

Quelqu'un peut-il me guider quelle erreur je fais?

8
Aman

Voici comment installer un fichier MSI normal en silence :

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

Explication rapide:

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

La ligne de commande msiexec.exe est complète et prend en charge une variété d'options. Voici n autre aperç de la même interface de ligne de commande. Voici un versions annotées (a été cassé, ressuscité via la machine de retour).

Il est également possible de raccourcir un fichier batch avec des constructions telles que pour les boucles comme illustré ici pour les mises à jour Windows.

S'il y a cases à cocher qui doivent être cochées pendant la configuration, vous devez trouver les PUBLIC PROPRIÉTÉS attaché à la case à cocher et définissez-le sur 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 fichier journal détaillé ou en ouvrant le MSI dans Orca, ou un autre outil approprié . Vous devez rechercher dans la section de contrôle de boîte de dialogue ou dans la table des propriétés le nom de la propriété. Essayez d'exécuter le programme d'installation et créez d'abord un fichier journal détaillé, puis recherchez les messages dans le journal sous la rubrique "Définition de la propriété ...", puis voyez le nom de la propriété. Ajoutez ensuite cette propriété avec la valeur du fichier journal à la ligne de commande.

Regardez également comment utiliser les transformations pour personnaliser le MSI au-delà de la définition des paramètres de ligne de commande: Comment mieux utiliser les fichiers MSI

17
Stein Åsmul

Bien que cela puisse paraître 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 juste 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 tandis que dans un fichier de commandes, msiexec ne semble pas définir d'erreurs. J'ai essayé différentes choses comme

  • Utilisation de start/wait
  • Utilisation de! ERRORLEVEL! variable au lieu de% ERRORLEVEL%
  • Utilisation de SetLocal EnableDelayedExpansion

Rien ne fonctionne et ce qui m'agace le plus, c'est le fait que cela fonctionne en ligne de commande.

0
Giuseppe

Voici le fichier batch qui devrait vous convenir:

@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 répertoriés sur la dernière page sortent lors de la saisie dans une fenêtre d'invite de commandes soit help cmd ou cmd /? ont une signification particulière dans les fichiers batch. Voici des parenthèses et des crochets utilisés également 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 entre guillemets doubles ou d'échapper ces caractères avec le caractère ^ comme on peut le voir dans le code ci-dessus, sinon l'interpréteur de ligne de commande quitte l'exécution par lots en raison d'une erreur de syntaxe.

Et il n'est pas possible d'appeler un fichier avec l'extension MSI. Un fichier * .msi n'est pas un exécutable. En double-cliquant sur un fichier MSI, Windows recherche dans le registre quelle application est associée à cette extension de fichier pour une action d'ouverture. Et l'application à utiliser est msiexec avec l'option de ligne de commande /i pour installer l'application dans le package MSI.

Courir msiexec.exe /? pour obtenir dans une fenêtre GUI les options disponibles ou regardez 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 commandes ci-dessus, la commande start est utilisée avec l'option /wait pour démarrer l'application Windows msiexec.exe et maintenez l'exécution du fichier de commandes jusqu'à ce que l'installation soit terminée (ou abandonnée).

0
Mofi