What is the best practice to auto upgrade MSI based application?

I am trying to find a standard Microsoft updater service which will update the application/services on customer machine automatically.

Does any auto updater service like this exist?


UPDATE: Deployment Technolgies & Windows Installer Benefits (just a cross-reference).


ClickOnce: I am not aware of any standard Microsoft features to auto-update MSI installations. The alternative (and pretty much obsolete) deployment technology ClickOnce had some auto-update functionality. I never used this technology for much of anything. I think PhilDW has used it though.

MSI SDK: Not auto-update as such, but the MSI SDK contains a default setup.exe wrapper and an example for A URL-Based Windows Installer Installation. Essentially a way to invoke installation from an URL. I tried it about 17 years ago and abandoned it.

App-V: if you are in a corporate environment I suppose App-V application streaming is an option - centralized installation and management of deployed applications.

MSIX: a quick mention of MSIX - a new deployment technology from Microsoft based upon the previous AppX format (not AppV - plenty to be confused about). Maybe check Bogdan Mitrache's summary description of MSIX. Auto-update features available for MSIX are unclear to me (UPDATE: see Bogdan's answer). Added another link below to a comprehensive guide:

Update: MSIX Tutorial: A comprehensive 24-chapter guide (also written by Bogdan Mitrache).

Third Party Deployment Tools: Commercial deployment tools such as Advanced Installer and (I think) Installshield have features to support MSI auto-update built into their tools (semi-automatic updates). I am not up to speed on the exact technical and conceptual details and limitations since I haven't use the features. I think Advanced Installer lets you point to your own site, but I am not sure what Installshield does. Quick, general ad-hoc overview of major MSI tools.

Roll Your Own?: I implemented an update check functionality in a product once by having the application send the currently installed MSI file's product code to a very simple database on the company's web site. The database had information as to what would be the latest version to upgrade to, and offered it as a direct download link in the browser. You can make your application do this checking directly, but we preferred the browser to work around any firewalls and proxy issues by making it a standard web page lookup (product GUID embedded in the URL). This check was invokable from the help menu in the product. Note: if you make such a feature, make sure to disable it for non-admin users AND ideally make it possible to disable by group policy - or just a registry flag in HKLM.


Some Links:

  • Application setup
  • How to create windows installer
  • How to tag or customize the a binary (for example of an installer)
  • How to create precofigured installer (MSI or EXE) with valid signature?

As a follow up to Stein's answer.

MSIX: This is still hot and most of your users probably never hear of it so my recommendation is to address it only for R&D purposes.

Just to confirm Stein's answer, there is a support for auto-updates for MSIX/AppX packages. Actually the latest version of Advanced Installer can build MSIX/AppX packages which also leverage this support.

Third party tools: If you want to deploy today an application to Windows 7 and Windows 10 users, the old MSI is still your friend.

Just like Stein mentioned, most of all professional third party tools on the market provide an auto-updater which you can hook into your application pretty fast. With Advanced Installer, this is pretty straightforward (or so we hope :)). Using our updater you can enable your users to check for an update manually, by creating a simple shortcut to launch it, or on a schedule (Advanced Installer will create a scheduled task) or you can even call it directly from your application.

Unless you have really a lot of time on your hands and like upsetting your users, I would not recommend to go on an build your own updater. It sounds simple, but can very easily become complicated, for you and for your users (the ones hitting your bugs or limitations).

Disclaimer: If it wasn't already clear from Stein's answer, I work on the team building Advanced Installer.