Plugin: Install Launcher
This feature will be available with the release of EPM v1.3, which is right around the corner!
Audience: IT admins and deployment engineers. This page describes InstallLauncher, a helper component that works with the RedirectEvaluator plugin to allow standard users to run .msi installers interactively without triggering nested UAC prompts.
What the InstallLauncher Plugin Does
InstallLauncher Plugin DoesWhen a user with Least Privilege applied tries to open an .msi file, the system would normally prompt for administrator credentials through Windows UAC — which standard users cannot satisfy. InstallLauncher solves this by intercepting the elevation request through the redirect capability and running msiexec.exe from within an already-elevated process, bypassing the nested UAC prompt entirely.
The result: the user gets the standard Windows Installer interface for the package they selected, and elevation is handled transparently by EPM without requiring admin credentials at the point of install.
How It Works
InstallLauncher operates as the redirect target in the LaunchPrivilegeElevation flow:
The user double-clicks or right-clicks an
.msifile and selects Install.EPM intercepts the privilege elevation request.
The elevation policy allows the request. The check-redirect task in the LaunchPrivilegeElevation job runs and evaluates the active redirect rules.
The built-in MSI rule matches:
sourceExePatternmatchesmsiexec.exeandcommandLinePatternmatches any.msifile path.EPM denies the original
msiexec.exelaunch and instead starts InstallLauncher elevated vialaunch-elevated.InstallLaunchercallsmsiexec.exeusingUseShellExecute, passing the MSI path and any command-line arguments from the original request.The user sees the native Windows Installer UI for the package.
Because msiexec.exe is started from within a process that is already elevated, there is no secondary UAC prompt for the installer or any helper processes it spawns.
For background on the redirect capability and how redirect rules are evaluated, see Reference: Redirect Capability.
Deployment
InstallLauncher is built and deployed alongside other EPM components:
Build output location:
publishoutput/Jobs/bin/InstallLauncher/Runtime location: Deploy to the same
Jobs/bin/directory as other EPM job tools.
The RedirectEvaluator plugin resolves InstallLauncher by short name from Jobs/bin/. No additional path configuration is required as long as it is deployed in the standard location.
Built-in MSI Redirect Rule
The default RedirectEvaluator plugin definition (KeeperPrivilegeManager/Plugins/RedirectEvaluator.json) ships with a redirect rule for .msi files already configured under metadata.redirect.rules:
This rule matches any privilege elevation request where msiexec.exe is invoked with an .msi path on the command line, and redirects it to InstallLauncher with the file path and original command line as arguments.
To modify or extend this rule — for example to restrict it to specific directories, add nonAdminOnly, or add rules for other installer types — edit Plugins/RedirectEvaluator.json directly on the endpoint, or push an updated configuration using a SettingsUpdate policy. See Plugin: RedirectEvaluator for details on deploying rule changes centrally.
Placeholder Tokens
The targetArguments field in a redirect rule supports the following tokens, which RedirectEvaluator expands before passing them to InstallLauncher:
{FilePath}
Full path of the .msi file from the elevation request
{FileName}
Base file name only (e.g. installer.msi)
{Directory}
Directory containing the file
{CommandLine}
Command line from the original elevation request (may be empty)
The default rule uses "{FilePath}" {CommandLine}, which passes the full path quoted (to handle spaces) followed by any additional arguments the user or calling application supplied.
Elevation File Extensions
EPM's companion apps (Keeper Agent and Keeper Client) use a file called elevation-allowed-extensions.json, deployed alongside the application executable, to determine which file extensions are eligible to trigger a privilege elevation request. The .msi extension is included in this list by default.
To customize the allowed extensions for your deployment, create a JSON file with the following structure and point to it using the KEEPER_ELEVATION_EXTENSIONS_CONFIG environment variable:
If you omit a platform key, the built-in default for that platform is preserved. Set the environment variable KEEPER_ELEVATION_EXTENSIONS_CONFIG to the full path of your custom file to override the default at runtime.
User Interface
InstallLauncher launches msiexec.exe using UseShellExecute, which means the Windows Installer UI is fully native. Whatever interface the .msi package and its arguments specify is what the user sees:
No custom arguments → standard interactive installation wizard.
/quietor/qnin the command line → silent or reduced-UI install, as defined by the package.
There is no additional EPM-provided UI. InstallLauncher is transparent to the user.
Silent Mode / Automation
By default, InstallLauncher does not write anything to stderr during a normal interactive elevation — there is nothing extra for the user to see or dismiss.
When running in automated or scripted contexts where a console is attached and you want failure details surfaced, enable silent mode using any of the following:
Command-line flag
--silent or --quiet-ui or /silent
Environment variable
KEEPER_INSTALL_LAUNCHER_SILENT=1 or KEEPER_INSTALL_LAUNCHER_SILENT=true
In silent mode, if msiexec.exe exits with a non-zero code, InstallLauncher writes a short failure summary to stderr. The process exit code is always the Windows Installer exit code regardless of this setting.
CLI Reference
InstallLauncher can also be invoked directly from a command prompt or script, independently of the redirect flow. This is useful for testing, automation, and scripted deployments.
Basic install:
Silent install:
Full msiexec control (repair, uninstall, product code):
Use -- as a separator when you need to pass arguments that begin with / or - directly to msiexec.exe without InstallLauncher interpreting them as its own flags. Everything after -- is forwarded verbatim.
<path>.msi [args]
Path to the .msi file, optionally followed by msiexec arguments
-- <msiexec args>
Pass arguments directly to msiexec.exe (use for repair, uninstall, product codes)
--silent / --quiet-ui / /silent
Print failure details to stderr when msiexec exits non-zero
Summary
What it does
Runs msiexec.exe from an already-elevated process so .msi files install without a UAC prompt
How it's triggered
Via the RedirectEvaluator built-in MSI redirect rule in the LaunchPrivilegeElevation flow
Where to deploy
Jobs/bin/InstallLauncher/ alongside other EPM job tools
Default rule
Ships in Plugins/RedirectEvaluator.json; matches msiexec.exe + .msi on the command line
UI
Native Windows Installer UI; no EPM interface added
Silent mode
--silent or KEEPER_INSTALL_LAUNCHER_SILENT=1 — stderr failure summary only; exit code is always the msiexec result
Allowed extensions
Configured via elevation-allowed-extensions.json; override path with KEEPER_ELEVATION_EXTENSIONS_CONFIG
Last updated

