Skip to main content

How to Repair an MSI Installation in Batch Script

Sometimes a program becomes "Corrupted" when a user accidentally deletes a vital .dll, a registry key is overwritten by another app, or a system crash leaves the software in a "Half-Broken" state. Rather than performing a destructive "Uninstall and Reinstall" (which might lose the user's settings), you can perform an MSI Repair. A Batch script can use the msiexec engine with the /f switch to scan the application's files and registry entries, automatically replacing anything that is missing or damaged. This is a professional-grade "Self-Healing" tool that can fix a broken workstation in seconds.

This guide will explain how to automate software repairs using Batch.

Method: The "Fix Everything" Repair (msiexec /f)​

The /f switch has several sub-options. The most powerful is omus, which checks files, shortcuts, and registry entries.

@echo off
:: You need the Product Code (GUID) or the original MSI file path
set "ProductCode={12345678-ABCD-1234-ABCD-1234567890AB}"
set "LogFile=C:\Logs\repair_%COMPUTERNAME%.log"

echo [MAINTENANCE] Repairing corrupted software package...

:: Ensure the log directory exists
if not exist "C:\Logs" mkdir "C:\Logs"

:: /f = Repair
:: o = Reinstall if file is missing
:: m = Rewrite registry entries
:: u = Rewrite user profiles
:: s = Reinstall shortcuts
:: /qn = Quiet mode (No UI)
:: /L*V = Verbose logging
start /wait "" msiexec /fomus "%ProductCode%" /qn /L*V "%LogFile%"

if %errorlevel% equ 0 (
echo [SUCCESS] Repair completed. Application should be functional.
) else if %errorlevel% equ 3010 (
echo [SUCCESS] Repair completed. A system restart is required.
) else if %errorlevel% equ 1605 (
echo [ERROR] Product not found. The application may not be installed.
echo Verify the Product Code with:
echo wmic product get Name, IdentifyingNumber
) else (
echo [ERROR] Repair failed with exit code: %errorlevel%
echo Check the log file: %LogFile%
)

pause
warning

Administrative Rights. Repairing a program involves writing to protected system directories and the HKLM registry. You MUST run your script as an Administrator.

Method 2: Repairing from a Local MSI File​

If you don't have the GUID, you can use the original installer file to trigger the repair logic.

@echo off
set "Source=D:\Installers\PhotoEditor.msi"
set "LogFile=C:\Logs\repair_from_file.log"

:: Verify the MSI file exists
if not exist "%Source%" (
echo [ERROR] MSI source file not found: %Source%
echo The original installer is required for file-based repair.
pause
exit /b 1
)

if not exist "C:\Logs" mkdir "C:\Logs"

echo [ACTION] Running repair from source media...

:: /fomus with a file path uses the MSI as the repair source
start /wait "" msiexec /fomus "%Source%" /qn /L*V "%LogFile%"

if %errorlevel% equ 0 (
echo [SUCCESS] Application has been repaired.
) else if %errorlevel% equ 3010 (
echo [SUCCESS] Repair completed. Restart required.
) else (
echo [ERROR] Repair failed with exit code: %errorlevel%
echo Check the log file: %LogFile%
)

pause

Method 3: The "Self-Healing" Maintenance Task​

Use this script as a scheduled task for critical shared computers (like a kiosk or a reception desk) to ensure their essential software is perfectly healthy every morning.

@echo off
set "ProductCode={MSI-GUID-OF-KIOSK-APP}"
set "LogDir=C:\Logs"
set "LogFile=%LogDir%\kiosk_health_%date:~-4%%date:~4,2%%date:~7,2%.log"

if not exist "%LogDir%" mkdir "%LogDir%"

echo [%date% %time%] Preventive maintenance starting... >> "%LogFile%"

:: Run repair silently
start /wait "" msiexec /fomus "%ProductCode%" /qn /norestart /L*V "%LogFile%"

if %errorlevel% equ 0 (
echo [%date% %time%] Repair: SUCCESS - Application verified healthy >> "%LogFile%"
) else if %errorlevel% equ 3010 (
echo [%date% %time%] Repair: SUCCESS - Restart pending >> "%LogFile%"
) else if %errorlevel% equ 1605 (
echo [%date% %time%] Repair: ERROR - Product not installed >> "%LogFile%"
) else (
echo [%date% %time%] Repair: FAILED - Exit code %errorlevel% >> "%LogFile%"
)

How to Avoid Common Errors​

Wrong Way: Thinking a 'Repair' adds missing features​

An MSI Repair can only fix things that were supposed to be there. It cannot add a "Premium" module or change the version of the software.

Correct Way: Use the Repair function strictly to fix "Broken" installations where the program icon has vanished or the app won't launch due to missing system files.

Problem: Source Not Found​

Sometimes the repair logic needs to look back at the original .cab files inside the installer. If you moved the .msi to a different folder after installing, the repair might fail with a "source not found" error.

Solution: Use Method 2 to point the script back to the original source location of the installer files. Alternatively, keep original MSI files in a consistent deployment directory.

Best Practices and Rules​

1. Identify "omus" vs Other Flags​

While omus is the industry standard for a general fix, other sub-options are available:

  • p = Reinstall if file is missing or older than the source
  • e = Reinstall if file is missing or equal/older version
  • d = Reinstall if file is missing or a different version
  • v = Force reinstall from source regardless of version

2. Administrator Privileges​

Repairs always require high-level permissions. If your script runs without Admin rights, it may silently fail to update the registry entries.

3. Log the Repair​

Just like an installation, always log the results. If a machine keeps needing "Repairs" every week, it's a sign that the hard drive is failing or a user is intentionally tampering with the system files. msiexec /fomus "%ProductCode%" /qn /L*V "C:\Logs\repair_audit.log"

Conclusions​

Repairing MSI installations via Batch script is a proactive, professional way to maintain a reliable computing environment. By moving from reactive "Uninstall/Reinstall" cycles to structured "Self-Healing" repairs, you minimize downtime and preserve user settings. This transition is essential for anyone managing high-uptime systems, shared workstations, or mission-critical enterprise applications.