public void Execute() { if (!_app.IsStaged) { throw new InvalidOperationException("Application isn't staged. Can't install."); } bool firstInstall = !_app.IsInstalled; if (firstInstall) { _hookExecutor.ExecuteFirstInstall(); } _hookExecutor.ExecutePreInstall(); _app.BackupAndInstall(); _hookExecutor.ExecutePostInstall(); if (firstInstall) { _hookExecutor.ExecuteFirstPostInstall(); } }