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?
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
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
Rien ne fonctionne et ce qui m'agace le plus, c'est le fait que cela fonctionne en ligne de commande.
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).