Deploying eM Client as an MSIX package

Starting with version 11, eM Client for Windows ships as an MSIX package instead of an MSI. This guide explains what changed for administrators and answers the three questions we hear most: how to install for every user on a machine, how to install on machines without internet access (offline install), and how to control updates.

Package
eMClient.20054CA46072C
Publisher ID
veq4nz3ze5v72
Version number to replace
11.0.xxxx

What changed from MSI

MSIX is the packaging format Windows uses for modern apps. It installs into a protected system folder, keeps the app separate from the rest of the system, and removes cleanly. Most of what you know from MSI has a direct equivalent, but the tools are different.

TaskeM Client 10 (MSI)eM Client 11 (MSIX)
Silent installmsiexec /i setup.msi /qnAdd-AppxPackage (one user) or Add-AppxProvisionedPackage (all users)
Install locationC:\Program Files (x86)\eM ClientC:\Program Files\WindowsApps\eMClient.20054CA46072C_<version>_<arch>__veq4nz3ze5v72, managed by Windows
Per-machine installALLUSERS=1Provisioning: Windows registers the app for each user at sign-in
ArchitectureOne 32-bit buildOne bundle with native x86, x64 and ARM64 builds. Windows picks the right one for the current device.
UpdateseM Client's built-in updater, controlled by Updates mode in License ManagerWindows App Installer, controlled by the .appinstaller file and PowerShell. The License Manager setting no longer applies.
Uninstallmsiexec /xRemove-AppxPackage / Remove-AppxProvisionedPackage
Command lineMailClient.exe /dbrepair
"<full path>\mailclient.exe" /dbrepair
emclient.exe /dbrepair: an app execution alias that keeps working after updates, while the WindowsApps folder name changes with every version
Good to know

The package is signed by eM Client s.r.o. so you don't need to import a certificate. Sideloading of signed apps is allowed by default on current Windows 10 and Windows 11, including LTSC editions without the Microsoft Store.

Upgrade from eM Client 10 (MSI)

An MSIX package can't upgrade an MSI installation. To move existing v10 machines to v11, use the transition MSI file from emclient.com/download-11. The MSI file doesn't contain the app itself. It does the following:

  • uninstalls eM Client 10 and keeps the user database
  • keeps file and protocol associations, such as eM Client being set as the default mail app
  • installs eM Client 11 through the public .appinstaller file, so it needs internet access

On first start, eM Client 11 carries over the Run on startup setting and scheduled backup tasks from version 10.

If eM Client 11 was installed alongside version 10

Installing the MSIX directly, without the transition MSI, leaves eM Client 10 on the machine. Both apps use the same database, and once version 11 upgrades it, version 10 can no longer open it.

eM Client 11 detects this. When it finds an older eM Client 10 MSI installation, it shows a notification in the app with an Uninstall button:

  • Uninstall starts the standard Windows Installer removal of eM Client 10. User data is kept. Windows asks for administrator rights, because version 10 was installed per machine.
  • Later hides the notification for seven days. Closing it any other way doesn't postpone it, so it comes back on the next start.
  • After version 10 is removed, eM Client 11 checks the Run on startup and backup settings again, so they point to version 11.
For administrators

Standard users can't complete the removal without administrator rights. On managed machines, remove eM Client 10 centrally and the notification stops appearing.

The files you work with

We publish three types of file. Normally a user only sees the first; for managed deployment you'll mostly use the second.

1.appinstaller

A small XML file. It tells Windows where to download the bundle and how to check for updates.

~1 KB · not signed
2.msixbundle

The installer. You deploy this file in managed environments.

signed by eM Client s.r.o.
3.msix × 3

One package per architecture. Windows installs only the one that matches the machine.

x86 · x64 · ARM64

This is the .appinstaller file we publish, with notes on each part:

emclient.appinstaller
<AppInstaller Uri="https://licensing.emclient.com/api/update/emclient.appinstaller?version=11.0.xxxx"
              Version="11.0.xxxx.0"
              xmlns="http://schemas.microsoft.com/appx/appinstaller/2017">
  <!-- The package to install: name, publisher, version and download URL -->
  <MainBundle Name="eMClient.20054CA46072C"
              Publisher="CN=eM Client s.r.o., O=eM Client s.r.o., L=Praha 8, C=CZ"
              Version="11.0.xxxx.0"
              Uri="https://cdn-dist.emclient.com/dist/v11.0.xxxx/setup.msixbundle" />
  <!-- Check the AppInstaller Uri on the first line for a newer version when the app starts (at most once every 24 h) -->
  <UpdateSettings>
    <OnLaunch />
  </UpdateSettings>
</AppInstaller>

Download the MSIX bundle

This script reads the current .appinstaller and downloads the bundle it points to. Run it on any machine with internet access.

PowerShell
$src = 'https://licensing.emclient.com/api/update/emclient.appinstaller'
Invoke-WebRequest $src -OutFile .\emclient.appinstaller -UseBasicParsing
[xml]$ai = Get-Content .\emclient.appinstaller
$ver = $ai.AppInstaller.MainBundle.Version
Invoke-WebRequest $ai.AppInstaller.MainBundle.Uri -OutFile ".\emclient-$ver.msixbundle" -UseBasicParsing
"Downloaded eM Client $ver"

Install for all users on a machine

MSIX apps are always registered per user. The MSIX equivalent of a per-machine install is provisioning. You add the package to the Windows image once. Windows then registers it for every user at sign-in, including users who sign in for the first time later. The program files are stored once on the machine, not once per user.

PowerShell or DISM

Run elevated, for example from a startup script, an RMM tool or a task sequence:

PowerShell (Administrator)
Add-AppxProvisionedPackage -Online -PackagePath 'C:\Deploy\emclient-11.0.xxxx.0.msixbundle' -SkipLicense

# Check that it is provisioned
Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like 'eMClient*'
DISM equivalent
DISM /Online /Add-ProvisionedAppxPackage /PackagePath:"C:\Deploy\emclient-11.0.xxxx.0.msixbundle" /SkipLicense

Users who are already signed in get the app at their next sign-in. To register it right away for the current user as well, run Add-AppxPackage -Path <bundle> in that user's session.

Deployment tools

Microsoft Intune

Apps › Windows › Line-of-business app

Upload the .msixbundle. Set App install context to Device to provision it for all users, or User for per-user installs.

Configuration Manager

Deployment type: Windows app package

Point it at the .msixbundle and enable Provision this application for all users on the device.

Group Policy

Computer startup script

Group Policy can't deploy MSIX packages directly. Use a computer startup script that runs the Add-AppxProvisionedPackage command above from a network share.

Remove eM Client from all users

PowerShell (Administrator)
# Stop provisioning it for new users
Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like 'eMClient*' |
    Remove-AppxProvisionedPackage -Online

# Remove it from every user who already has it
Get-AppxPackage -AllUsers 'eMClient*' | Remove-AppxPackage -AllUsers

Install for one user only

Without admin rights, a user can install for themselves from the bundle or from the .appinstaller. Installing from the .appinstaller also turns on automatic updates (see Updates).

PowerShell (as the user)
# From the bundle: no automatic updates
Add-AppxPackage -Path '\\server\deploy\emclient-11.0.xxxx.0.msixbundle'

# From the .appinstaller: Windows keeps the app updated
Add-AppxPackage -AppInstallerFile 'https://licensing.emclient.com/api/update/emclient.appinstaller'

Offline install on machines without internet access

The .msixbundle contains the whole app. Once you have downloaded it (see Files), installing it doesn't need internet access. You have two options, depending on whether the machines should update themselves from an internal source.

A. Deploy the bundle

simplest

Copy the .msixbundle to a share or into your deployment tool and install it for all users. To update, deploy a newer bundle the same way.

You push every update

B. Host an internal update source

self-updating, no internet

Put the bundle and an edited .appinstaller on an internal web server or file share. Clients check that location for updates.

Clients update themselves

Set up an internal update source (option B)

  1. Download the bundle and copy it to an internal location, such as \\fs01\apps\emclient\ or https://intranet.example.local/emclient/.
  2. Save a copy of the .appinstaller next to it and change both Uri attributes to point at your server. The .appinstaller isn't signed, so you can edit it. Don't change the .msixbundle, because that would break its signature.
  3. Install on clients from your copy: Add-AppxPackage -AppInstallerFile \\fs01\apps\emclient\emclient.appinstaller.
  4. To release a new version, copy in the new bundle and update the two Version attributes and the bundle Uri. Clients install it the next time they start eM Client and switch to it after they close and reopen the app.
\\fs01\apps\emclient\emclient.appinstaller
<?xml version="1.0" encoding="utf-8"?>
<AppInstaller Uri="file://fs01/apps/emclient/emclient.appinstaller"
              Version="11.0.xxxx.0"
              xmlns="http://schemas.microsoft.com/appx/appinstaller/2017">
  <MainBundle Name="eMClient.20054CA46072C"
              Publisher="CN=eM Client s.r.o., O=eM Client s.r.o., L=Praha 8, C=CZ"
              Version="11.0.xxxx.0"
              Uri="file://fs01/apps/emclient/emclient-11.0.xxxx.0.msixbundle" />
  <UpdateSettings>
    <OnLaunch HoursBetweenUpdateChecks="24" />
  </UpdateSettings>
</AppInstaller>
Web server

If you host the files over HTTP(S), serve .appinstaller as application/appinstaller and .msixbundle as application/msixbundle. IIS and some other servers block unknown file extensions until you add these types.

Control updates

In eM Client 11, Windows handles updates, not eM Client itself. How updates behave depends on how the app was installed:

Installed fromWhat happens
Our public .appinstallerWhen the user starts eM Client, Windows checks for a newer version. This check does not happen more than once every 24 hours. If there is one, Windows downloads and installs it in the background, without a prompt, while eM Client keeps running. The new version runs the next time the user closes and reopens eM Client.
Your internal .appinstallerThe same, but Windows checks your server, so you decide which version clients get.
The .msixbundle directly (PowerShell, Intune, ConfigMgr)Windows doesn't check for updates. The installed version stays as-is until you deploy a newer one.

Pick a policy

You want…Do this
Always the latest versionInstall from our public .appinstaller. Nothing else to configure.
To approve each version firstHost an internal .appinstaller (Offline install – option B) and update it after testing it yourself first. For test and production rings, publish two .appinstaller files.
To push every update yourselfDeploy the .msixbundle with your deployment tool. To upgrade, deploy the newer bundle. Windows replaces the old version and keeps user data.
To stop updates on machines that already update themselvesRemove or pause the update settings with PowerShell, as shown below.

Check, pause or turn off automatic updates

These commands change the update settings of an installed package. Run them in the user's session after eM Client has been started at least once, because eM Client sets its update address on first start.

PowerShell
# Show the current update settings (no output = no automatic updates)
Get-AppxPackageAutoUpdateSettings 'eMClient.20054CA46072C_veq4nz3ze5v72'

# Turn automatic updates off
Remove-AppxPackageAutoUpdateSettings 'eMClient.20054CA46072C_veq4nz3ze5v72'

# Or pause them, here for 30 days (720 hours)
Set-AppxPackageAutoUpdateSettings 'eMClient.20054CA46072C_veq4nz3ze5v72' -PauseUpdates -HoursToPause 720
Note

The Updates mode setting in License Manager doesn't affect eM Client 11 on Windows. Store policies such as Turn off Automatic Download and Install of updates also don't apply, because eM Client from these bundles is not from the Microsoft Store.

Force an update now

PowerShell
Add-AppxPackage -AppInstallerFile ((Get-AppxPackageAutoUpdateSettings 'eMClient.20054CA46072C_veq4nz3ze5v72').AppInstallerUri)

Network requirements

If clients go online through a proxy or firewall, allow these hosts and exclude them from TLS inspection:

  • licensing.emclient.com (the .appinstaller and update checks)
  • cdn-dist.emclient.com (the .msixbundle downloads)
  • http://*.lencr.org on port 80 (certificate revocation checks for the two hosts above)

Windows installs MSIX packages through a system service that rejects certificates replaced by a TLS-inspecting proxy. An install that fails with error 0x80072F8F is almost always caused by this.

Command reference

TaskCommand
Install for all usersAdd-AppxProvisionedPackage -Online -PackagePath <bundle> -SkipLicense
Install for current userAdd-AppxPackage -Path <bundle>
Install with auto-updateAdd-AppxPackage -AppInstallerFile <url or path>
Show installed versionGet-AppxPackage -AllUsers 'eMClient*' | Select-Object Name, Version, PackageUserInformation
Show provisioned versionGet-AppxProvisionedPackage -Online | Where-Object DisplayName -like 'eMClient*'
Show update settingsGet-AppxPackageAutoUpdateSettings 'eMClient.20054CA46072C_veq4nz3ze5v72'
Turn off auto-updateRemove-AppxPackageAutoUpdateSettings 'eMClient.20054CA46072C_veq4nz3ze5v72'
Uninstall from existing usersGet-AppxPackage -AllUsers 'eMClient*' | Remove-AppxPackage -AllUsers
Run with parametersemclient.exe /dbrepair

The commands use full cmdlet names. You can also use the standard PowerShell aliases, which work the same way: ? or where for Where-Object, and select for Select-Object.

Package family name: eMClient.20054CA46072C_veq4nz3ze5v72

Troubleshooting

A proxy or firewall is inspecting TLS. Exclude licensing.emclient.com and cdn-dist.emclient.com from inspection and allow http://*.lencr.org.

The Prevent non-admin users from installing packaged Windows apps policy is on. Provision the app as an administrator instead (Install for all users).

Check that Allow all trusted apps to install isn't disabled under Computer Configuration › Administrative Templates › Windows Components › App Package Deployment.

Microsoft turned off this protocol by default. Download the .appinstaller file and open it, or use Add-AppxPackage -AppInstallerFile.

MSIX was installed while v10 was still present. Use the Uninstall button in the notification eM Client 11 shows, or uninstall eM Client 10 from Installed apps.

Use the emclient.exe alias, which doesn't depend on the version folder.