Catch(…) and rethrow
Ned Batchelder said that he didn't approve of the catch(...) but I think it's necessary in this particular instance. This is because when the UpdateRegistry method fails for any reason, the CopyFiles must be undone.
What I missed is re-throwing the exception after fixing the stuff I knew I had to fix:
} catch (...)
{
UnCopyFiles();
UnUpdateRegistry();
throw;
}
If there are other specific error conditions that you can handle and eat (de-escalating them from exceptions to return codes) then you'd want to do that in a separate catch block.