Fact-checked by Grok 2 weeks ago

Windows Installer

Windows Installer is an and service provided with Windows operating systems, offering a standardized framework for the , maintenance, and removal of software applications. It enables developers to create installer packages in the . format, which support features like on-demand , user customization, and corporate deployment management. First released in 1997 (version 1.0) with 4.0 and included in (version 1.1) in 2000, with version 2.0 following in in 2001, Windows Installer has evolved through subsequent releases integrated into later Windows versions, including version 3.0 in 2004, 4.0 in 2007, 4.5 in 2008, and 5.0 in 2009 with Windows 7. Key enhancements across versions include support for applying multiple patches in a single transaction (version 3.0 and later), for installing multiple packages atomically (version 4.5 and later), and improved resource security through file and registry permissions (version 5.0 and later). These capabilities ensure reliable , reduce administrative overhead, and facilitate features like application advertisement—where software can be advertised to users without full installation—and self-healing, which repairs missing components automatically. As a core Windows component, Windows Installer serves as the foundation for the Microsoft Standard Installer (msiexec.exe), which interprets .msi packages and handles command-line options for silent installations, repairs, and modifications. It promotes consistency in software distribution by enforcing best practices for component enumeration, source list management, and integration with Windows features like Group Policy for enterprise environments. While redistributable packages were available for earlier versions to ensure compatibility on older systems, version 5.0 and beyond are natively included in modern Windows editions, eliminating the need for separate downloads.

Overview

Purpose and Core Functionality

Windows Installer is a core system service in Windows, implemented through the executable msiexec.exe, which facilitates the installation, maintenance, and uninstallation of software applications packaged in the Installer () format. This service provides a standardized for deploying applications, ensuring consistent behavior across Windows operating systems and reducing the complexity of for developers and administrators. At its core, Windows Installer automates the sequencing of installation actions, executing a predefined series of operations to copy files, register components, and configure system resources in the correct order. It addresses shared component management by using to track usage of common files and registry entries across multiple applications, thereby mitigating version conflicts historically known as "." Additional key functions include robust rollback mechanisms, which restore the system to its pre-installation state upon failure—enhanced in versions 4.5 and later for multi-package transactions—and support for advertised shortcuts that enable on-demand feature activation without requiring a complete upfront . The service offers significant benefits, including broad standardization that simplifies enterprise deployment and compatibility testing across Windows versions, seamless integration with (UAC) for secure handling of elevated privileges starting with Windows Installer 5.0, and extensibility via custom actions that allow developers to incorporate application-specific logic, such as scripting or external process calls, into the installation process. In a typical high-level workflow, installation is triggered by double-clicking an .msi file or invoking msiexec.exe via command line with appropriate parameters; the engine then parses the package's , validates prerequisites, and runs actions defined in tables like InstallExecuteSequence to orchestrate the deployment. This approach ensures reliable, transactional operations that minimize user intervention and system disruption.

History and Development

Windows Installer was developed by in the late 1990s as a standardized system service to manage the installation, maintenance, and removal of software applications on Windows operating systems, aiming to replace the inconsistent and often unreliable methods employed by third-party installers such as , which frequently led to issues like incomplete uninstallations and orphaned files. Windows Installer was first introduced on August 31, 1999, with version 1.0 as a redistributable component, notably used with 2000. This initiative sought to establish a unified that ensured reliable deployments, supported rollback capabilities, and facilitated enterprise-wide management, drawing from earlier experimental tools within 's development ecosystem. The technology shipped with as version 1.1, with later service packs providing updates, and it built upon the tool—a graphical database editor included in the Windows SDK for creating and modifying package files, which had been prototyped during the early phases of Windows Installer's design to handle the relational structure of installation databases. Version 2.0 was released with in October 2001, with a redistributable package made available for and earlier platforms, introducing key advancements in package handling and component tracking, setting the stage for broader adoption. Subsequent milestones marked significant evolutions tied to major Windows releases. Integration into further refined version 2.0 with improved stability and support for more complex installations. In 2006, version 4.0 arrived with , incorporating native support for (UAC) to enhance security during elevated installations in non-corporate environments. By 2009, version 5.0 debuted in and Server 2008 R2, featuring optimizations for quicker installation processes, better handling of multiple packages, and enhanced resource securing for accounts, services, files, and registry keys. This version has persisted through and 11, benefiting from modular updates that maintain compatibility while introducing incremental performance and security refinements. Microsoft continues to maintain Windows Installer through periodic Windows updates, ensuring ongoing compatibility and security hardening; in the 2020s, this has included enhancements to mitigate legacy vulnerabilities, such as requiring (UAC) prompts for MSI repair operations to prevent unauthorized privilege escalations (as of the August 2025 security update). The MSI file format specification, detailed in 's official documentation, has influenced industry standards by providing a structured, database-driven approach to packaging that promotes across deployment tools.

Package Architecture

MSI File Format

The MSI file format is a relational database encapsulated within an OLE structured storage container, enabling the storage of installation instructions, metadata, and binary data in a single compound file. This structure organizes the package's content into multiple interrelated tables that define essential elements such as properties, files to install, registry modifications, and execution actions. The OLE format supports streams for the database itself, embedded binaries, and other resources, allowing Windows Installer to parse and execute the package efficiently during deployment. A critical component is the Summary Information Stream, which holds package including the GUID—a that distinguishes the application or —and revision numbers for versioning. This stream facilitates package identification, upgrade detection, and display of basic information in tools like Add/Remove Programs. For security, the MsiDigitalSignature table stores details of digital signatures applied to the package, certificates, and signed objects, verifying and preventing tampering before installation proceeds. Payloads, such as application files, are typically compressed and embedded as (.cab) streams within the MSI, using algorithms like MSZIP to reduce file size while maintaining easy extraction via the Cabinet API. The features over 70 standard tables, providing a predefined for installation data; for instance, the File table enumerates source files with attributes like size, version, and language, while the Registry table outlines keys, values, and data types for system modifications. These tables form a with primary keys, foreign keys, and indexes to enforce consistency and enable efficient lookups. Developers interact with the schema through the Windows Installer , which supports SQL-like queries (e.g., via MsiDatabaseOpenView) to , insert, or update records during package authoring or runtime analysis. Packages are generated by compiling authoring files—such as XML-based .wxs files from tools like the —into the binary format, populating the database tables and embedding streams as specified. provides utilities like for direct database editing, while third-party tools automate the build process from source definitions. For localization, transform files (.mst) serve as lightweight modifications to the base , altering table entries like strings or to support different languages without recompiling the entire package; these are applied via the TRANSFORMS during . The format's fixed schema limits flexibility, often requiring custom actions—such as DLL exports, , or —to handle logic beyond standard tables, like conditional file operations or external integrations. Additionally, inheritance from OLE structured storage imposes size constraints in older Windows versions, capping individual or the overall file at approximately 2 GB, though external files can extend payload capacity.

Products, Features, and Components

In Windows Installer, the installation package is structured around a hierarchical model of products, , and components to enable modular and reusable installations. This design allows for flexible user choices during setup, shared resources across applications, and consistent management of installation states. The model is defined within the MSI database, where tables such as the , Component, and FeatureComponents tables establish the logical relationships. A product represents the top-level unit of , encompassing a complete application or . It is uniquely identified by a ProductCode GUID, which serves as the principal identifier for the product release and enables the Windows Installer to detect, , or remove it without conflicts. For instance, major changes or shifts (e.g., from 32-bit to 64-bit) require a new ProductCode to signal a distinct . Features are groupings of functionality within a product that can be installed optionally or required, allowing users to customize the setup. Examples include a "Core Application" for essential binaries or "Help Files" for . The Feature table governs these, specifying attributes such as visibility (e.g., hidden or displayed in the ), install levels (ranging from 1 to 32,767 to determine selection based on the INSTALLLEVEL property), and hierarchical parent- relationships up to 16 levels deep. Installing a feature automatically installs its parent, ensuring dependencies are met. Components form the of the , such as individual files (e.g., a DLL), registry keys, shortcuts, or objects, which are installed or removed as indivisible entities. Each component is assigned a unique ComponentId GUID in the Component table to track its and facilitate sharing across multiple products or features, preventing duplication and version conflicts on the system. A key rule is that each component must have exactly one key file to determine its installation state, and components cannot share resources across directories to maintain . The relationships between these elements are defined by the FeatureComponents table, which maps components to their parent features in a tree-like structure, with up to 1,600 components per feature. This enables the installer to query and manage states such as local (fully installed on the system), advertised (registered but not yet installed), or absent (not present). Circular dependencies between components are prohibited to avoid installation failures.

Key Paths and References

In Windows Installer, a key path serves as the primary indicator for a component's state, consisting of a single file, directory, registry value, or other persistent element that the installer checks to determine if the component is present on the system. For example, an executable file (.exe) located in the component's installation directory often functions as the key path, representing the entire component and enabling the installer to verify its integrity during operations. This mechanism ensures system integrity by tying the component's lifecycle to a unique, reliable reference point. The selection of a key path follows specific rules to maintain consistency and avoid conflicts. By default, the key path is the first file listed in the component unless explicitly overridden by the package author, such as when designating a registry key or a server file for more precise control. Key paths must be unique across components—no two components can share the same key path value, though they may share a directory key path—and they are required to be persistent, meaning they should not be easily removable or modifiable outside the installer's control to prevent false negatives in detection. In the Component table of the MSI database, the KeyPath column specifies this reference, pointing to entries in related tables like , Registry, or ODBCDataSource, while the Directory_ column provides a fallback directory key path if KeyPath is null. Components are referenced throughout the MSI package using their unique ComponentId, a GUID stored in the Component table, which links to resources in tables such as (for file installations) and Registry (for registry entries). This referencing system supports dependency management, where features or other components declare needs via FeatureComponents and other tables. For shared components, such as DLLs used by multiple products, Windows Installer employs : the installer increments a count in the shared DLL registry entry (under HKEY_LOCAL_MACHINE\SOFTWARE[Microsoft](/page/Microsoft)\Windows\CurrentVersion\SharedDLLs) when installing and decrements it upon removal, preventing premature uninstallation if the count exceeds zero. To enable this, the component's Attributes flag includes msidbComponentAttributesSharedDllRefCount (0x0008). Key paths play a critical role in maintenance tasks by allowing the installer to detect discrepancies, such as missing or corrupted elements, triggering repairs as needed. If the key path is absent or does not match the expected state during a verify or repair operation, the installer considers the component uninstalled and reinstalls it to restore integrity. Components, including their key paths, are registered in the under HKEY_LOCAL_MACHINE\SOFTWARE[Microsoft](/page/Microsoft)\Windows\CurrentVersion\Installer, with product-level uninstall information integrated under HKEY_LOCAL_MACHINE\SOFTWARE[Microsoft](/page/Microsoft)\Windows\CurrentVersion\Uninstall for visibility in system tools like Add/Remove Programs. Advanced configurations extend key path functionality beyond simple files. While key paths are inherently tied to components (which are selected based on conditions), authors can design conditional installations where a feature's state influences component activation, indirectly affecting key path checks. Non-file key paths, such as registry values or ODBC data source entries, are supported via the Component table's Attributes (e.g., msidbComponentAttributesRegistryKeyPath = 0x0004 for registry or msidbComponentAttributesODBCDataSource = 0x0010 for ODBC), allowing components without physical files to be tracked reliably. These options ensure robust handling of diverse installation scenarios while upholding the installer's reference-counting and detection principles.

Installation and Maintenance

Installation Process

The installation process of a Windows Installer package, typically an .msi file, begins with the acquisition phase, where the Msiexec.exe executable or another application launches the installer and queries the package's sequence tables to generate an execution script. This is followed by two primary sequences: the (UI) sequence and the execute sequence. The UI sequence, defined in the InstallUISequence table, handles user interactions and is executed only when the installation UI level is set to full or reduced, such as displaying welcome dialogs, license agreements, and prompts. It runs up to the InstallValidate action, allowing users to provide input that sets properties influencing the subsequent execute phase. The execute sequence, outlined in the InstallExecuteSequence table, performs the core installation actions after the UI phase concludes, operating with elevated privileges to modify the system. Actions in this sequence are ordered by their sequence numbers and can be immediate or deferred: immediate actions execute in the installer's context and may query the UI for input, while deferred actions—often custom actions requiring system changes—are queued in the execution script and run elevated without UI access to ensure security and consistency. For instance, deferred actions are placed after InstallFinalize to avoid interruption and support rollback if needed. During the execute sequence, costing determines resource needs and user selections. The CostInitialize action starts the process by loading the Feature and Component tables into memory, followed immediately by the FileCost action, which calculates disk space requirements for each file and component, accounting for factors like volume clustering and existing file versions to avoid unnecessary overwrites. The CostFinalize action then computes total costs, including temporary space, and integrates user input such as the INSTALLLEVEL property, which sets the default installation level for features—features with a level below this value are selected by default, enabling hierarchical selection without exhaustive listing. To ensure reliability, the installer employs a model for atomicity, generating a script in parallel with the execution ; if an error occurs, the system reverts changes using backed-up files stored in a hidden directory. The action facilitates this by creating restore points for critical files before modifications, allowing the installation to either complete fully or undo all changes without partial states. Upon success, rollback artifacts are deleted. Installations can be initiated via command-line options with Msiexec.exe, such as /i package.msi to install or configure a product, /qn for quiet mode without UI, and /l*v logfile.txt for verbose logging to aid . These options allow silent deployments or customized behaviors while adhering to the defined sequences.

Repair, Modification, and Removal

Windows Installer provides mechanisms to repair, modify, or remove installed products and features, ensuring system integrity and allowing post-installation adjustments without full reinstallation. Repair operations verify and restore components based on predefined criteria, such as file versions or registry integrity, using the REINSTALLMODE property to specify actions like reinstalling missing or corrupted elements. These processes leverage key paths—representative files or registry keys in components—to detect issues and trigger targeted reinstallations, reinstalling only affected components rather than the entire product. Repair is initiated via the msiexec command-line tool with the /f option, which sets the REINSTALLMODE property to a string of letters defining the repair scope; the default is "omus," reinstalling missing or older files, rewriting user and machine registry entries, and reinstalling shortcuts. For example, /fomus targets missing or older files, rewrites registry entries, and reinstalls shortcuts, while /fa forces reinstallation of all files regardless of state. The REINSTALL property must be set (e.g., REINSTALL=ALL for all features) to enable the repair, and operations run from the original source if the /v flag is included, recaching the package locally. Repairs can also be triggered through the Programs and Features interface in Control Panel, which invokes msiexec with appropriate parameters. Modification allows adding or removing after initial , using the of the installer to adjust the feature set without affecting the core product. This is achieved via msiexec /i with like ADDLOCAL to install additional features locally (e.g., msiexec /i package. ADDLOCAL=Feature1,Feature2 REINSTALL=ALL), REMOVE to uninstall specific features (e.g., msiexec /i package. REMOVE=Feature1 REINSTALL=ALL), or REMOVE=ALL to uninstall everything except level 0 features. The installer evaluates these in sequence: ADDLOCAL first, then REMOVE, ensuring additive changes take precedence; feature names are case-sensitive and drawn from the Feature table. To identify available features for modification, developers inspect the package's Feature table using tools like , or enable verbose logging with /l*v during a reinstall to log current states. The Maintenance UI, launched via Add/Remove Programs or advertised shortcuts, provides a graphical for these selections, applying changes atomically to avoid partial states. Removal reverses the installation sequence, executing actions in the opposite order of the original install to cleanly uninstall products, features, or components while preserving shared resources. The msiexec /x option initiates uninstallation (e.g., msiexec /x {ProductCode-GUID} or msiexec /x package.msi), setting REMOVE=ALL by default to remove all installed features and triggering the InstallExecuteSequence with removal conditions. Actions like RemoveFiles (last in install) run first in uninstall, followed by registry unregistration and custom action rollbacks, ensuring dependencies are handled properly. Shared components are managed through in the Component table: installation increments the count (especially for shared DLLs with the msidbComponentAttributesSharedDllRefCount attribute), and removal decrements it, preventing deletion until the count reaches zero across all referencing products. Uninstallation can be triggered from Add/Remove Programs (invoking msiexec /x with the product's GUID), command line (/x), or advertised shortcuts (which may prompt full removal if configured). During removal, the installer cleans temporary files associated with the product (e.g., via RemoveFiles entries) and purges related registry keys from HKEY_LOCAL_MACHINE and HKEY_CURRENT_USER, though global temp directories require separate cleanup if not product-specific. For edge cases like failed prior installs leaving orphaned registry entries or cached files, forced removal uses msiexec /x {ProductCode} REINSTALL=ALL to reinstall components before uninstalling, ensuring completeness; persistent orphans may require the Program Install and Uninstall Troubleshooter or manual registry editing under guidance.

Package Development

Tools for Creating Packages

The primary tools for creating Windows Installer packages, known as files, enable developers to author, compile, and customize experiences for Windows applications. These tools range from open-source command-line utilities to (IDE) extensions and commercial graphical interfaces, each supporting the declarative structure of the MSI format to define products, features, components, and installation logic. The is an open-source collection of build tools that allows developers to create packages using a declarative XML . Authors define installation elements in .wxs source files, which are compiled into .wixobj intermediate files using the compiler and then linked into a final .msi file via the linker. This XML-based approach mirrors the tables of the format, facilitating precise control over components, files, registries, and user interfaces. also includes the engine for building bootstrappers, which orchestrate multi-package setups by chaining multiple MSIs or EXEs into a single executable bundle for complex deployments like prerequisites and patches. The toolset integrates with build systems such as MSBuild or , making it suitable for automated pipelines. Visual Studio Installer Projects provide an extension for Microsoft's IDE, targeted at .NET developers, to generate basic packages directly within the development environment. Installed via the Visual Studio Marketplace, the extension adds setup project templates that allow adding project outputs, files, and assemblies to define installation targets, with support for custom actions and launch conditions. Users can customize installation UIs through dialog editors and configure properties like upgrade codes for versioning, producing MSIs that integrate seamlessly with .NET Framework or .NET Core applications. While simpler than advanced tools, it excels in for single-project setups without requiring external scripting. Commercial tools offer enhanced graphical interfaces and automation for enterprise-scale MSI authoring. InstallShield, developed by Revenera (formerly ), supports advanced scripting through its InstallScript language, enabling custom logic for complex installations such as conditional file placements and database integrations. It includes wizards for importing existing projects, building patches, and creating multilingual setups, with built-in validation to ensure MSI compliance. Advanced Installer provides a drag-and-drop interface for defining package elements, supporting features like digital signatures, prerequisites, and cloud integrations for updates. Its project types range from simple MSIs to App-V sequences, emphasizing ease of use for non-experts while allowing PowerShell-based customizations. Custom actions extend MSI packages by executing user-defined code during installation sequences, such as file operations or registry modifications not covered by standard actions. These can be implemented as or files embedded in the MSI, DLL entry points called via Type 1 or Type 2 custom actions, or executable files launched with Type 18 or 19. For .NET integration, scripts can be invoked through a custom DLL using InstallUtil.exe or direct embedding. Packages may also chain external EXEs or nested MSIs via custom actions or bootstrapper wrappers, allowing hybrid installations while maintaining Windows Installer's transactional integrity. Best practices for MSI authoring emphasize to enhance reusability and . In tools like , authors should use fragments—self-contained XML modules for components or features—that can be referenced across packages without duplication, promoting shared libraries for common elements like prerequisites. Testing packages on virtual machines isolates environments, simulating diverse and OS configurations to verify , repair, and uninstall behaviors without affecting systems. This approach reduces errors from path dependencies and ensures compatibility across Windows versions.

Validation Techniques

Validation techniques for Windows Installer packages primarily involve systematic checks to ensure the MSI database is structurally sound, logically consistent, and compliant with the technology's specifications, preventing installation failures and deployment issues. These methods detect errors in tables, relationships, and custom actions before runtime, allowing developers to author robust packages that adhere to best engineering practices. The core validation mechanism consists of Internal Consistency Evaluators (ICEs), a suite of more than 100 built-in tests implemented as custom actions in , , DLLs, or executables. ICEs scan the MSI database for inconsistencies, such as invalid globally unique identifiers (GUIDs) via ICE01, which flags non-standard formats that could lead to component conflicts, or duplicate files across components detected by ICE27 to avoid resource overlap during installation. Other evaluators, like ICE43, verify that each component has a valid key path to ensure proper file tracking and , aligning with core component rules for resource management. These tests are merged into the database as a .cub file during validation, producing detailed error reports that guide corrections. Microsoft's .exe serves as a primary graphical tool for validation, enabling developers to view and edit database tables while integrating the full suite for on-demand checks. By opening an file in , users can run selected or all ICEs directly, reviewing results in a dedicated validation pane that highlights issues like unused icons in the Icon table (flagged by ICE36) or invalid directory structures (ICE56). This tool facilitates iterative editing and revalidation, ensuring packages meet structural integrity without requiring command-line operations. For command-line validation, msival2.exe provides a scriptable alternative, executing ICE suites against MSI files or merge modules as part of build pipelines. Included in the Windows SDK, it supports options to run specific or the entire set, outputting errors to console or log files for automated processing, such as custom action validation using ICEs such as and for type and sequence compatibility with elevation requirements. This utility is essential for environments where graphical tools are impractical. External tools extend validation beyond native options; for instance, the toolset's linker (light.exe or wix.exe in modern versions) performs compile-time checks during package building, integrating ICE runs and additional static analysis for custom actions. validation flags issues like invalid key paths or schema mismatches early in the development cycle, complementing MSI-specific evaluators by enforcing XML source compliance before compilation. Static analysis in such tools can also inspect custom action scripts for potential vulnerabilities or logical errors not covered by standard ICEs. Common validation errors include invalid key paths that violate component isolation, often resolved by reassigning files to dedicated components, and unused icons or invalid directory entries that trigger , , or failures. UAC-incompatible elevations in custom actions may require deferred execution attributes to align with privilege requirements, with resolutions informed by error codes such as those indicating sequence or condition anomalies (e.g., akin to runtime 2716 but flagged pre-install). These errors underscore the need for thorough execution to preempt deployment problems. Compliance validation ensures adherence to the MSI database schema, such as version 5.0 (indicated by the MSIDatabase property value of 500), which supports advanced features like secure object declarations. ICEs like ICE01 verify primary key and schema integrity, while targeted testing confirms compatibility with modern platforms, including Windows 11, by running evaluators against runtime behaviors and privilege models. Packages passing these checks demonstrate reliability across Windows versions without introducing undocumented deviations.

Best Practices and Common Issues

When designing Windows Installer packages, developers should minimize the use of custom actions to enhance reliability, as these actions can introduce points of failure if they depend on non-critical resources or uninstalled components. Instead, rely on standard actions provided by the Windows Installer whenever possible. For scenarios requiring elevated privileges, such as system modifications, use elevated deferred custom actions properly by scheduling them after InstallInitialize and ensuring they execute in the context of the original user's limited token, which is supported in Windows Installer 3.0 and later. Packages should also be optimized for silent installations by supporting the UI level "None" and providing public properties for configuration, while avoiding any user interactions or automatic restarts that could interrupt unattended deployments. To improve performance, compress files into (.cab) files, either external or embedded, to reduce the overall package size and extraction time during . Avoid including unnecessary files or components in the package, as this can increase duration and resource usage; instead, conduct thorough testing to identify and exclude extraneous elements. Additionally, set appropriate install levels to balance feature availability with per-user and per-machine contexts, ensuring the package supports both scenarios without excessive overhead. Common issues in Windows Installer deployments include the "Another installation is in progress" error (error code ), which occurs when the msi.dll library remains locked due to a previous installation process not completing properly, often requiring registry cleanup or service restarts to resolve. Path length errors arise when installation paths exceed the 260-character MAX_PATH limit in Windows versions prior to , leading to failures in file operations; enabling long path support via or registry can mitigate this in compatible systems. Mishandling of (UAC) prompts is another frequent problem, particularly when packages assume full system access without setting the MSIDEPLOYMENTCOMPLIANT property to 1, resulting in unexpected elevation requests or installation halts for non-admin users. For troubleshooting these and other issues, enable verbose logging by running installations with the command-line option /l*v (e.g., msiexec /i package.[msi](/page/MSI) /l*v log.txt), which captures detailed output including , warnings, and property values to identify failure points. Review the Windows under the Application log for MsiInstaller events, as it records general from the Error and installation outcomes for further diagnosis. Tools such as Wilogutl.exe can then analyze these log files, highlighting and suggesting solutions based on common patterns. In modern environments, consider migrating traditional MSI packages to containerized formats like MSIX for improved isolation, security, and deployment efficiency, using the MSIX Packaging Tool to convert existing installers while preserving functionality. Similarly, App-V virtualization can address compatibility challenges, but attention must be paid to potential conflicts with Windows (UWP) apps, such as shared registry access or overlaps that may require custom scripting during transitions.

Versions and Compatibility

Release History

Windows Installer version 1.0 was released on August 31, 1999, providing limited installation capabilities primarily for , , and with 3 or later. This version laid the foundation for standardized but lacked advanced features like patching. Version 2.0 was released in 2001 with and as a redistributable for SP3 (2002), introducing support for patching and advertised shortcuts to enhance user experience and maintenance. It extended compatibility to , 98, Me, and NT 4.0 SP6, marking a significant expansion from its predecessor. In 2003, version 3.0 debuted with , bringing improvements in user interface elements and support for merge modules to simplify component integration in packages. Version 3.1 followed as an update, available via redistributables and included in Windows XP 3 and Server 2003 , focusing on stability enhancements. Version 4.0 was released in 2006 with , incorporating support for (UAC) and application manifests to align with enhanced security paradigms. An interim update, version 4.5, emerged in 2009 with SP2 and SP2, addressing various bug fixes and performance refinements. Version 5.0 launched in July 2009 alongside and , adding capabilities for multiple package instances and optimized execution speeds. This version has remained the core implementation through subsequent releases, including , 10, Server 2012, Server 2016, Server 2019, Server 2022, and as of 2025, with no major version updates.
VersionInitial Release YearPrimary Operating SystemsKey Compatibility Notes
1.01999, 98, NT 4.0 SP3+Limited; supported basic 1.0 packages
2.02001, 2000 SP3Added to older 9x/NT; full backward support for 1.0 packages
3.02003, XP SP2Redistributable for prior OS; maintained 1.0 compatibility
4.02006, Server 2008UAC integration; backward compatible with all prior formats
4.52009 SP2, Server 2008 SP2Bug fixes; seamless support for earlier versions
5.02009, Server 2008 R2Current standard; supports 1.0+; forward compatibility via application shims for legacy packages on modern Windows
All versions of Windows Installer maintain backward compatibility, enabling the execution of 1.0 packages created for the initial release without modification. For , later Windows versions employ application shims to handle older packages that may encounter issues due to OS changes, ensuring broad support across the ecosystem.

Key Changes Across Versions

Windows Installer has evolved through successive versions, introducing enhancements that address installation reliability, , patching efficiency, and compatibility challenges. These changes have significant implications for developers, who must adapt package authoring to leverage new features while ensuring , and for users, who benefit from more robust and deployment experiences. Key advancements focus on mitigating common issues like file conflicts, reducing update sizes, enforcing protocols, and supporting modern deployment scenarios. Version 2.0, released with and SP3, introduced support for minor upgrades, allowing developers to update specific files and components without altering the , which facilitates targeted servicing without full reinstalls. Additionally, it implemented resilient file handling through enhanced key path mechanisms, designed to prevent DLL overwrites and resolve "" scenarios where shared libraries were inadvertently replaced, thereby improving system stability during installations. These features reduced the risk of application breakage from conflicting updates, enabling more reliable multi-application environments. In version 3.1, included in Service Pack 3 and Service Pack 2, made improvements including opt-in flyweight patching for smaller patch sizes and better support for applying patches to packages with large numbers of files. This significantly reduced requirements for patches by optimizing differences between versions, making servicing faster and more efficient for network-constrained deployments. Developers gained tools for creating smaller, more precise updates, which minimized download times and storage needs while maintaining installation integrity. Version 4.0, integrated with and , introduced enhanced support for digital signature verification of packages, ensuring that installations can proceed with authenticated, untampered files to prevent malicious alterations. It also introduced per-user installations, allowing non-administrative users to install applications in their profiles without elevating privileges, which enhanced usability in restricted environments like corporate networks. These changes bolstered security against unauthorized modifications and supported diverse user permission models, though they required developers to author packages compliant with (UAC) standards. With version 5.0, shipped in and , Windows Installer improved multi-instance detection, enabling the simultaneous installation of multiple versions of the same product via unique instance identifiers, which is crucial for scenarios like tools. Furthermore, updates in this era addressed vulnerabilities, including CVE-2017-8687, an elevation-of-privilege flaw in the installer service that could allow local attackers to gain higher privileges; Microsoft mitigated it through security patches enhancing input validation. Post-5.0 developments, particularly in updates, integrated Windows Installer with policies, allowing administrators to enforce application control rules that restrict or permit installer execution based on publisher certificates or paths, thereby enhancing in enterprise settings. In the 2020s, focused on deprecating 16-bit support, as 64-bit Windows versions no longer accommodate 16-bit installers or components, prompting developers to migrate to 32- or 64-bit formats to avoid compatibility failures. Later versions introduced compatibility breaks, such as stricter GUID validation for components and features, which enforces unique identifiers more rigorously to prevent reuse across packages; this causes failures in legacy installations where GUIDs were inconsistently managed, requiring updates to older .msi files for continued support. These evolutions underscore the need for developers to validate packages against current standards, balancing with of existing ecosystems.

Advanced Features

Security and Patching

Windows Installer incorporates digital signatures based on Authenticode to verify the authenticity and integrity of installation packages () and patches (). These signatures allow the system to detect tampering or corruption by comparing embedded certificates against trusted authorities, and they apply to packages, transforms, merge modules, and external . Although not mandatory by default, signatures can be enforced through group policies, such as Software Restriction Policies, to restrict installations to trusted publishers. Verification of signatures typically uses the from the , while the specifically checks the structural validity of the package as an installation database, ensuring compliance with the expected schema before signature validation proceeds. Historical vulnerabilities in Windows Installer have included elevation of exploits, such as CVE-2023-21800 and CVE-2025-50173, which allowed local attackers to bypass security boundaries during package execution. DLL hijacking has also posed risks, where attackers exploit the system's DLL search order to load malicious libraries instead of legitimate ones, potentially leading to code execution during installation. Mitigations include directing DLL loads to safe paths (e.g., system directories with known integrity) and leveraging Mandatory Integrity Control levels under (UAC) to enforce low-integrity execution for untrusted components, reducing the impact of such exploits. Patching in Windows Installer enables targeted updates without full reinstalls, categorized into small updates for minor file changes without altering the product code, minor upgrades that increment the product version and package code for more significant modifications, and major upgrades that change the product code for complete overhauls. Patches are packaged in .msp files, which contain deltas or full files along with upgrade rules, and the installer validates them against the original .msi by checking product codes, version compatibility, and consistency to prevent invalid applications. This validation ensures patches apply only to matching installed products, maintaining system stability. Best practices for secure deployments emphasize using the /a command-line option for administrative installations, which extracts packages to a network share for controlled and avoids issues like signature loss during patching. Custom actions, which extend installation logic, should be restricted to trusted, signed code executed in user-privilege contexts by default to limit system access; elevated execution requires explicit deferral and is discouraged unless necessary, as it increases exposure to exploits. In modern Windows environments, Windows Installer benefits from integration with , which performs real-time malware scanning of package files and extracted components during the installation process via on-access scanning, helping detect and block threats before they execute. UAC, introduced in , further enhances this by prompting for elevation only when required, isolating installer actions from user contexts (as detailed in Key Changes Across Versions).

Integration with Modern Windows

Windows Installer continues to serve as a core component in and for installing and managing legacy MSI-based applications, particularly those classified as Win32 desktop apps, while modern (UWP) and applications rely on supplementary packaging formats like MSIX. In these operating systems, the service handles the execution of MSI packages, ensuring reliable deployment, repair, and removal of traditional software, but it operates alongside enhanced app models that provide better isolation and update mechanisms for newer apps. In enterprise environments, Windows Installer integrates seamlessly with management tools such as for automated software distribution. Administrators can use the Software Installation extension in to assign or publish packages to users or computers, enabling centralized deployment across domains without manual intervention on client devices. Additionally, it supports integration with (formerly SCCM), where files are deployed as applications through the console, allowing for targeted installations, compliance monitoring, and scalability in large-scale IT operations. As Windows evolves, alternatives to traditional MSI packages have emerged to address limitations in , portability, and deployment efficiency. The shift toward .appx and MSIX formats enables sandboxing for improved application , reducing conflicts and enhancing user data protection, particularly for Store-distributed apps. For scenarios requiring , App-V provides application streaming and without full , complementing Windows Installer's role by allowing side-by-side execution of legacy software; however, App-V's extended support ends on April 14, 2026. Microsoft encourages migration to MSIX for new and repackaged applications due to its unified packaging benefits, though Windows Installer and remain fully supported to maintain with existing ecosystems. Programmatic control of Windows Installer is facilitated through the , which includes functions like MsiInstallProduct for initiating installations from MSI files, enabling developers to embed deployment logic in custom applications. For .NET developers, wrappers such as Microsoft.Deployment.WindowsInstaller provide interop layers to interact with the underlying COM-based , simplifying tasks like database manipulation and sequence execution in managed code environments.

References

  1. [1]
    Windows Installer - Win32 apps - Microsoft Learn
    Jul 14, 2025 · Note. This documentation is intended for software developers who want to use Windows Installer to build installer packages for applications.
  2. [2]
    Microsoft Standard Installer command-line options - Win32 apps
    Apr 29, 2025 · This article describes standard command-line options for the Microsoft Standard Installer msiexec.exe, the app you use to interpret packages and install ...
  3. [3]
    Windows Installer Best Practices - Win32 apps | Microsoft Learn
    Dec 14, 2022 · This section enumerates a list of tips, linked to the main Windows Installer SDK documentation, to help Application Developers, Setup Authors, IT Professionals ...
  4. [4]
    Windows Installer Redistributables - Win32 apps - Microsoft Learn
    Jan 13, 2025 · There is no redistributable for Windows Installer 5.0. This version is included with the OS in Windows 7, Windows Server 2008 R2, and later ...Missing: bundled multi- instance CVE- 2017- 8687
  5. [5]
    msiexec | Microsoft Learn
    Feb 3, 2023 · Provides the means to install, modify, and perform operations on Windows Installer from the command line.
  6. [6]
    About Windows Installer - Win32 apps - Microsoft Learn
    Jan 7, 2021 · To install your applications efficiently and reduce the total cost of ownership (TCO) for your customers, you can use the Windows Installer.
  7. [7]
    InstallExecuteSequence Table - Win32 apps - Microsoft Learn
    Jan 7, 2021 · The InstallExecuteSequence table lists actions that are executed when the top-level INSTALL action is executed. Actions in the install ...
  8. [8]
    .NET Framework: Building, Packaging, Deploying, and ...
    Oct 23, 2019 · (You can determine which version of the Windows Installer is installed by running MSIExec.exe.) ... DLL Hell problems. The application will ...
  9. [9]
    Windows Installer Guide - Win32 apps - Microsoft Learn
    Jan 7, 2021 · The Windows Installer Guide contains information of interest to authors of Windows Installer packages and users of the Windows Installer ...
  10. [10]
    Released Versions of Windows Installer - Win32 apps
    Jan 7, 2021 · The table in this topic identifies the released versions of the Windows Installer. For more information, see Operating System Property Values.
  11. [11]
    Orca.exe - Win32 apps - Microsoft Learn
    Jul 18, 2024 · Orca.exe is a database table editor for creating and editing Windows Installer packages and merge modules. The tool provides a graphical ...
  12. [12]
    Using Windows Installer with UAC - Win32 apps - Microsoft Learn
    Jan 7, 2021 · When using Windows Vista in a non-corporate environment, UAC handles the elevation of application installation. Windows Installer 4.0 can call ...
  13. [13]
    What's New in Windows Installer 5.0 - Win32 apps | Microsoft Learn
    Jul 24, 2025 · Beginning with Windows Installer 5.0, a Windows Installer package is capable to secure new accounts, Windows services, files, folders, and registry keys.Missing: faster | Show results with:faster
  14. [14]
    Deprecated features in the Windows client - Microsoft Learn
    Deprecated features in Windows include Legacy Web View, Legacy Progressive Web Apps, Legacy Microsoft Edge DevTools, WMIC utility, and PowerShell 2.0.Missing: behaviors | Show results with:behaviors
  15. [15]
    About the Installer Database - Win32 apps | Microsoft Learn
    Jan 7, 2021 · The Windows Installer database consists of many interrelated tables that together comprise a relational database of the information necessary to install a ...
  16. [16]
    OLE Limitations on Streams - Win32 apps - Microsoft Learn
    Jan 7, 2021 · Developers of installation databases need to be aware of two limitations on the handling of streams by the Win32 OLE structured storage implementation.
  17. [17]
    Summary Information Stream - Win32 apps - Microsoft Learn
    Jan 7, 2021 · The summary information stream is used by the installer for two purposes. First, it contains information about the package that can be viewed ...Missing: GUID | Show results with:GUID
  18. [18]
    Package Codes - Win32 apps - Microsoft Learn
    Jan 7, 2021 · The package code is a GUID identifying a particular Windows Installer package. The package code associates an .msi file with an application or product.
  19. [19]
    MsiDigitalSignature Table - Win32 apps - Microsoft Learn
    Jan 7, 2021 · The MsiDigitalSignature table contains the signature information for every digitally signed object in the installation database.
  20. [20]
    Digital Signatures and Windows Installer - Win32 apps
    Jan 7, 2021 · With Windows Installer, digital signatures can be used with Windows Installer packages, transforms, patches, merge modules, and external cabinet files.
  21. [21]
    Cabinet Files - Win32 apps - Microsoft Learn
    Mar 10, 2025 · A cabinet is a single file, usually with a .cab extension, that stores compressed files in a file library.
  22. [22]
    Database Tables - Win32 apps - Microsoft Learn
    Jan 7, 2021 · In this article ; MsiDigitalSignature, Contains the signature information for every digitally-signed object in the installation database.
  23. [23]
    File Table - Win32 apps - Microsoft Learn
    Jan 7, 2021 · The File Table contains a complete list of source files with their various attributes, ordered by a unique, non-localized, identifier.Missing: format structure
  24. [24]
    TRANSFORMS property - Win32 apps - Microsoft Learn
    Aug 23, 2022 · You can indicate that a transform file is embedded in a storage of the .msi file, rather than as a stand-alone file, by prefixing the filename ...Missing: structure | Show results with:structure<|control11|><|separator|>
  25. [25]
    Components and Features - Win32 apps - Microsoft Learn
    Jan 7, 2021 · The Windows Installer organizes an installation around the concepts of components and features.
  26. [26]
    Product Codes - Win32 apps - Microsoft Learn
    Jan 7, 2021 · The product code is a GUID that is the principal identification of an application or product. For more information, see the ProductCode property.
  27. [27]
    Windows Installer Features - Win32 apps - Microsoft Learn
    Jan 7, 2021 · A feature is a part of the application's total functionality that a user recognizes and may decide to install independently.Missing: core | Show results with:core
  28. [28]
    Feature Table - Win32 apps | Microsoft Learn
    Jan 7, 2021 · The Feature Table defines the logical tree structure of features and contains the columns shown in the following table.
  29. [29]
    Windows Installer Components - Win32 apps | Microsoft Learn
    Jan 7, 2021 · A component is a piece of the application or product to be installed. Examples of components include single files, a group of related files, COM objects, ...Missing: format | Show results with:format
  30. [30]
    Component Table - Win32 apps - Microsoft Learn
    Aug 19, 2021 · If KeyPath is null, then the folder of the Directory_ column is used as the key path. Because folders created by the installer are deleted when ...
  31. [31]
    FeatureComponents Table - Win32 apps
    ### Summary of FeatureComponents Table
  32. [32]
    Organizing Applications into Components - Win32 apps
    ### Key Paths: Definition, Selection, Uniqueness, Persistence, and Role in Installation
  33. [33]
    Windows Installer Basics - Visual Studio - Microsoft Learn
    Jun 13, 2025 · The Windows Installer installs and uninstalls applications or software products on a user's computer, performing these tasks in units called Windows Installer ...Authoring a VSPackage · Key Terms
  34. [34]
    InstallUISequence Table - Win32 apps - Microsoft Learn
    Jan 7, 2021 · The InstallUISequence table lists actions that are executed when the top-level INSTALL action is executed and the internal user interface level is set to full ...
  35. [35]
    Using a Sequence Table - Win32 apps | Microsoft Learn
    Jan 7, 2021 · These tables specify the order of execution for the standard actions that control the installation process and display the user interface dialog boxes.
  36. [36]
    Deferred Execution Custom Actions - Win32 apps - Microsoft Learn
    Jan 7, 2021 · The purpose of a deferred execution custom action is to delay the execution of a system change to the time when the installation script is executed.Missing: elevated | Show results with:elevated
  37. [37]
    Custom Action Security - Win32 apps - Microsoft Learn
    Jan 7, 2021 · The installer runs custom actions with user privileges by default in order to limit the access of custom actions to the system.
  38. [38]
    CostInitialize Action - Win32 apps - Microsoft Learn
    Jan 7, 2021 · Call the FileCost action immediately following the CostInitialize action. Then call the CostFinalize action following the CostInitialize ...
  39. [39]
    FileCost Action - Win32 apps
    ### Summary of FileCost Action for Disk Space
  40. [40]
    INSTALLLEVEL property - Win32 apps | Microsoft Learn
    Mar 22, 2021 · The INSTALLLEVEL property is the initial level at which features are selected "ON" for installation by default. A feature is installed only ...
  41. [41]
    Installation Mechanism - Win32 apps - Microsoft Learn
    Jan 7, 2021 · There are two phases to a successful installation process: acquisition and execution. If the installation is unsuccessful, a rollback phase may occur.
  42. [42]
    Command-Line Options - Win32 apps | Microsoft Learn
    Jul 18, 2024 · Command-line options for msiexec.exe for Windows Installer 3.0 and earlier. Provides a table showing options, parameters, and descriptions.
  43. [43]
    REINSTALLMODE property - Win32 apps - Microsoft Learn
    Mar 18, 2024 · The REINSTALLMODE property is a string that contains letters specifying the type of reinstall to perform. Options are case-insensitive and order-independent.
  44. [44]
    ADDLOCAL property - Win32 apps - Microsoft Learn
    Mar 22, 2021 · The installer always evaluates the following properties in the following order: ADDLOCAL; REMOVE · ADDSOURCE · ADDDEFAULT · REINSTALL ...
  45. [45]
    REMOVE property - Win32 apps - Microsoft Learn
    Mar 22, 2021 · The value of the REMOVE property is a list of features delimited by commas that are to be removed. The features must be present in the Feature column of the ...Missing: selection | Show results with:selection
  46. [46]
    RemoveFiles Action - Win32 apps - Microsoft Learn
    Jan 7, 2021 · The RemoveFiles action removes files previously installed by the InstallFiles action. Each of these files is gated by a link to an entry in the Component table.Missing: uninstall | Show results with:uninstall
  47. [47]
  48. [48]
    Using WiX | Docs
    WiX can be used through Visual Studio with HeatWave, via MSBuild with dotnet build, or as a command-line .NET tool.
  49. [49]
    Microsoft Visual Studio Installer Projects 2022
    Sep 27, 2023 · This official Microsoft extension provides support for Visual Studio Installer Projects in Visual Studio 2022.
  50. [50]
    InstallShield: Windows Installer & MSIX | Free Trial - Revenera
    InstallShield is a tool for building Windows installers and MSIX packages, creating clean installs, upgrades, and uninstalls, and converting MSI to MSIX.InstallShield professional · InstallShield Pricing · InstallShield Tips and Tricks
  51. [51]
    Introduction to Advanced Installer
    Welcome to the User Manual of Advanced Installer. Advanced Installer is a popular tool for creating software installation packages that is widely used by ...
  52. [52]
    Using Advanced Installer
    A guide to using Advanced Installer, from the GUI to the Command Line and Shell integration.
  53. [53]
    About Custom Actions - Win32 apps - Microsoft Learn
    Jan 7, 2021 · Custom actions enable the author of an installation package to extend the capabilities of standard actions by including executables, dynamic-link libraries, ...
  54. [54]
    Custom Actions - Win32 apps - Microsoft Learn
    Jan 7, 2021 · The Windows Installer provides many built-in actions for performing the installation process. For a list of these actions, see the Standard ...
  55. [55]
    Using Internal Consistency Evaluators - Win32 apps - Microsoft Learn
    Jan 7, 2021 · To validate a database, use a special validation tool to merge a .cub file containing the Internal Consistency Evaluators (ICEs) into your database.
  56. [56]
    Internal Consistency Evaluators - ICEs - Win32 apps - Microsoft Learn
    Jan 7, 2021 · In this article​​ Internal consistency evaluators, also called ICEs, are custom actions written in VBScript, JScript, or as a DLL or EXE.
  57. [57]
    ICE Reference - Win32 apps - Microsoft Learn
    Jan 7, 2021 · An ICE is used to validate installation packages. The table in this topic identifies each ICE. For information about ICEMs used to validate ...
  58. [58]
    Msival2.exe - Win32 apps - Microsoft Learn
    Jan 7, 2021 · Msival2.exe is a command line utility that can run a suite of Internal Consistency Evaluators - ICEs. This tool is only available in the Windows SDK Components.
  59. [59]
    Validating an Installation Database - Win32 apps | Microsoft Learn
    Jan 7, 2021 · You can validate the sample package using Orca.exe or Msival2.exe. To view the help for Msival2.exe change directories and enter on the ...
  60. [60]
    Validation | Docs
    To run validation when using the Wix.exe .NET tool, use the wix msi validate subcommand. Errors running validation. Because the stock MSI ICEs are ...Missing: lit. | Show results with:lit.
  61. [61]
    Enable Windows Installer logging - Windows Client - Microsoft Learn
    Jan 15, 2025 · Windows Installer can use logging to help assist in troubleshooting issues with installing software packages. This logging is enabled by adding keys and values ...Missing: history | Show results with:history
  62. [62]
  63. [63]
    Windows Installer Logging - Win32 apps - Microsoft Learn
    Jul 18, 2023 · In this article​​ Windows Installer records errors and events in its own error log and in the Event log. The diagnostic information that the ...
  64. [64]
    Wilogutl.exe - Win32 apps - Microsoft Learn
    Apr 26, 2022 · Wilogutl.exe assists the analysis of log files from a Windows Installer installation, and it displays suggested solutions to errors that are found in a log ...
  65. [65]
    Create an MSIX package from any desktop installer - Microsoft Learn
    May 11, 2022 · This doc will walk you through how to take any existing assets you have, and convert them to MSIX.
  66. [66]
    Instmsi.exe - Win32 apps - Microsoft Learn
    Jan 7, 2021 · Instmsi.exe is the redistributable package for installing Windows Installer 2.0, and earlier versions of Windows Installer.
  67. [67]
    Windows Installer 3.1 v2 (3.1.4000.2435) is available
    Microsoft Windows Installer is a component of your Windows operating system that provides a standard foundation for installing and uninstalling software.
  68. [68]
    Patch Packages - Win32 apps - Microsoft Learn
    Jan 7, 2021 · A patch package (.msp file) delivers updates to Windows Installer apps, containing all update info and transforms, and is smaller than the full ...Missing: XML | Show results with:XML
  69. [69]
    Not Supported in Windows Installer 4.0 - Win32 apps | Microsoft Learn
    Mar 5, 2021 · The Windows Installer functions, tables, and properties listed on this page are not supported by Windows Installer 4.0 and earlier versions.Missing: integrity checks
  70. [70]
    Requirements to use AppLocker | Microsoft Learn
    Oct 1, 2024 · This article for the IT professional lists software requirements to use AppLocker on the supported Windows operating systems.
  71. [71]
    64-bit versions of Windows don't support 16-bit ... - Microsoft Learn
    May 30, 2025 · This article discusses the lack of support for 16-bit components, 16-bit processes, or 16-bit applications in x64-based versions Windows.
  72. [72]
    Triaging a DLL planting vulnerability - Microsoft
    Apr 4, 2018 · DLL planting (aka binary planting/hijacking/preloading) resurface every now and then, it is not always clear on how Microsoft will respond ...Missing: 2014- 4971
  73. [73]
    Patching and Upgrades - Win32 apps | Microsoft Learn
    Jan 7, 2021 · In this article ; Minor Upgrade, No change, Changed, A small update making changes significant enough to warrant changing the ProductVersion ...
  74. [74]
    Minor Upgrades - Win32 apps - Microsoft Learn
    Jan 7, 2021 · A minor upgrade and a small update differ in that a minor upgrade changes the package code and product version. See Small Updates for guidelines ...
  75. [75]
    Microsoft Defender Antivirus in Windows Overview
    Oct 20, 2025 · Microsoft Defender Antivirus is built into Windows, and it works with Microsoft Defender for Endpoint to provide protection on your device and in the cloud.
  76. [76]
    What is MSIX? - MSIX - Microsoft Learn
    Jun 11, 2024 · MSIX is a Windows app package format that provides a modern packaging experience to all Windows apps. The MSIX package format preserves the ...MSIX Packaging Tool · MSIX features and supported... · App Installer
  77. [77]
    Use Group Policy to remotely install software - Windows Server
    Jan 15, 2025 · This article describes how to use Group Policy to automatically distribute programs to client computers or users.Summary · Create a distribution point
  78. [78]
    Create and deploy an application - Configuration Manager
    Oct 4, 2022 · Create the application · Type: Choose Windows Installer (*.msi file). · Location: Select Browse to choose the location of the installation file ...<|separator|>
  79. [79]
    What is now the recommended packaging/installer technology for ...
    Aug 11, 2022 · Containers provide a lightweight, isolated environment that makes apps easier to develop, deploy, and manage. Windows Installer Best Practices ...
  80. [80]
    MsiInstallProductA function (msi.h) - Win32 apps | Microsoft Learn
    Feb 9, 2023 · The MsiInstallProduct function displays the user interface with the current settings and log mode. For more information, see REMOVE Property.