About couple years ago, I've faced neccessity to add Auto-update functionality to my software. There were several restrictions, to which this tool should comply.

  • Freeware, open source.
  • Intuitive programming interface.
  • Final binary should be independent of any external libraries.
  • Easy to integrate with a product

My search returned a few results, of which the only one beat other competitors - it was WinSparkle project.

The current version (at the moment, this article is written) is 0.4

The only drawback I encountered, was the english-only GUI. So, recently, I've decided to create custom brew of WinSparkle.dll, which would implement automatic multilang functionality.

Luckily, author of original WinSparkle utilized wxWidgets for low-level support, as well as (minimalistic, but sufficient) GUI. I had quite in-depth experience with wxWidgets in the past years, so it was a matter of slight configuration tweak, an minimal coding, to add gettext engine support to WinSparkle.dll.

The core principle was as follows. When WinSparkle invokes its GUI, it automatically tries to load mo translation, corresponding to the current OS locale, from the search path of form


 Where <localeId> is, for instance, ru_RU for Russian, de_DE for German, etc. By default, if no translation files are provided, or translations are not found, the English one is normally used.

MO files should be in UTF-8 encoding.

Provided as downloadable content, is an archive, containing custom WinSparkle.dll, built with MS viaul studio 2013, and PO template file, POT, of which all translation files should be created (RTFM GNU gettext).

In addition, there is Russian translation PO file, and thin C++ wrapper class EsAutoUpdater to provide WinSparkle interface to C++ applications in a native way. The class as-is was taken from my core GUI framework, so to make it integrateable into some other code, some (very few, actually) core changes should be made, but the principle is clear, so use it at your disposal.{phocadownload view=file|id=50|target=s}