Batch script to install MSI

前端 未结 3 1920
滥情空心
滥情空心 2020-12-01 11:33

I am trying to write a .bat for the first time.

I am trying to install .msi using script, currently we are installing manually by double clicking on

相关标签:
3条回答
  • 2020-12-01 11:57

    Here is the batch file which should work for you:

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

    The characters listed on last page output on entering in a command prompt window either help cmd or cmd /? have special meanings in batch files. Here are used parentheses and square brackets also in strings where those characters should be interpreted literally. Therefore it is necessary to either enclose the string in double quotes or escape those characters with character ^ as it can be seen in code above, otherwise command line interpreter exits batch execution because of a syntax error.

    And it is not possible to call a file with extension MSI. A *.msi file is not an executable. On double clicking on a MSI file, Windows looks in registry which application is associated with this file extension for opening action. And the application to use is msiexec with the command line option /i to install the application inside MSI package.

    Run msiexec.exe /? to get in a GUI window the available options or look at Msiexec (command-line options).

    I have added already /quiet additionally to required option /i for a silent installation.

    In batch code above command start is used with option /wait to start Windows application msiexec.exe and hold execution of batch file until installation finished (or aborted).

    0 讨论(0)
  • 2020-12-01 12:12

    This is how to install a normal MSI file silently:

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

    Quick explanation:

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

    The msiexec.exe command line is extensive with support for a variety of options. Here is another overview of the same command line interface. Here is an annotated versions (was broken, resurrected via way back machine).

    It is also possible to make a batch file a lot shorter with constructs such as for loops as illustrated here for Windows Updates.

    If there are check boxes that must be checked during the setup, you must find the appropriate PUBLIC PROPERTIES attached to the check box and set it at the command line like this:

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

    These properties are different in each MSI. You can find them via the verbose log file or by opening the MSI in Orca, or another appropriate tool. You must look either in the dialog control section or in the Property table for what the property name is. Try running the setup and create a verbose log file first and then search the log for messages ala "Setting property..." and then see what the property name is there. Then add this property with the value from the log file to the command line.

    Also have a look at how to use transforms to customize the MSI beyond setting command line parameters: How to make better use of MSI files

    0 讨论(0)
  • 2020-12-01 12:15

    Although it might look out of topic nobody bothered to check the ERRORLEVEL. When I used your suggestions I tried to check for errors straight after the MSI installation. I made it fail on purpose and noticed that on the command line all works beautifully whilst in a batch file msiexec dosn't seem to set errors. Tried different things there like

    • Using start /wait
    • Using !ERRORLEVEL! variable instead of %ERRORLEVEL%
    • Using SetLocal EnableDelayedExpansion

    Nothing works and what mostly annoys me it's the fact that it works in the command line.

    0 讨论(0)
提交回复
热议问题