protected virtual void InstallPatch(IPatch patch) { try { patch.Patch(this); } catch (Exception e) when(!(e is InstallException)) { throw new InstallException("failed to install " + patch.PatchName, e); } }