I have something that's in a couple of modules.
The "core" is a stand-alone command-line EXE which is passed the filename of an XML file, which contains filenames to be updated and how ("just do it", "version check only", source and destination folder, etc.). Since I also use it to automate demand loading of DLLs it also handles merging REG files into the registry. The EXE has a process monitor to wait until all AutoCAD sessions are closed to avoid "last one out wins" problems.
From the various branches of my program it gets called a couple of different ways. If particular routines throw an error I know there's a specific DLL out of date; the code calls the appropriate XML file for updating that DLL and alerts the user to close AutoCAD. There's also an "Update all" button in the Ribbon when it's time to hit the thing with a sledgehammer.