Nefarius' nŏvīcĭus universal software updater agent for Windows.
BSD-3-CLAUSE License
Nefarius' nŏvīcĭus universal software updater agent for Windows.
vīcĭus is a self-contained C++20 executable acting as a software update agent for Microsoft Windows. It can be deployed alongside your product and will take care of periodically checking for newer versions online and notifying the user of pending updates. Its goal is to require the least amount of configuration to get it up and running while providing enough flexibility to be customized for various environments, if desired. It doesn't require any prerequisites being present on the target system and should be able to run on any recent Windows version.
Dealing with software update mechanics has been a steady companion for almost 10 years by now, so it's about time to learn from all the mistakes, hardships and shortcomings the various products used have put me through all this time 😅 If you want something done right, you gotta do it yourself 💪
CustomizeMe.h
header file. This does not mean you need to maintain one build for every product you wanna support; you will get multi-tenancy out of the box by simply naming the resulting executable after the following scheme: manufacturer_product_Updater.exe
, e.g. nefarius_HidHide_Updater.exe
will build the server path as https://example.org/api/nefarius/HidHide/updates.json
(or however it is defined in CustomizeMe.h
) automatically!
Head over to the extended documentation for examples and detailed explanations.
You can get unsigned build snapshots here. Consider these Nightly-releases.
Signed stable releases will be provided on the repository releases page. Keep in mind though that those releases are built to use my own update infrastructure so in 99% of the cases you probably don't want to use them, at least not without a configuration file!
Set up Visual Studio 2022 or newer with the C++ Desktop Development workload.
To get binary compression to work upx has to be installed. You can do so via e.g.:
winget install upx
You do not have to touch the checked out sources if you wish to customize your build.
Assuming a manufacturer name Valkirie
and product name HandheldCompanion
, create the following folder structure and file .\include\Valkirie\HandheldCompanion\ViciusPostCustomizeMe.h
and override the server url in there like so:
#undef NV_API_URL_TEMPLATE
#define NV_API_URL_TEMPLATE "https://raw.githubusercontent.com/Valkirie/HandheldCompanion/main/Valkirie_HandheldCompanion_Updates.json"
Now you can build from the command line pointing the compiler to the directory of your header(s) like so:
msbuild .\src\vīcĭus.vcxproj /p:Configuration=Release /p:CustomIncludes="${PWD}\include\Valkirie\HandheldCompanion\" /p:UpdaterName=Valkirie_HandheldCompanion_Updater
This will produce the binary Valkirie_HandheldCompanion_Updater.exe
with the server URL of your custom header file baked into it!
You're of course free to put the custom header files anywhere on your system (like your own private repository), they do not need to be put under the project root directory.
For more details check the issue tracker.
Non-exhaustive list of things open or in-progress...
WizardPage::MultipleVersionsOverview
WizardPage::Start
WizardPage::SingleVersionSummary
WizardPage::DownloadAndInstall
Program Files
RegistryValue
FileVersion
FileSize
FileChecksum
CustomExpression
This tool benefits from these awesome projects ❤ (appearance in no special order):