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

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:

Leave a Comment