private void RemoveWebDeployServiceFromServer() { Logger.Info(string.Format("Removing WebDeploy from server [{0}]", _server.Name)); if (_executor != null) { _executor.Dispose(); } if (_remoteNeedsCleanup) { using (new Impersonator(_server.DeploymentUser.UserName, _server.DeploymentUser.Password)) { var retryAttempt = 0; do { try { if (Directory.Exists(RemotePath)) { Directory.Delete(RemotePath, true); } _remoteNeedsCleanup = false; Logger.Info(string.Format("Successfully removed WebDeploy from server [{0}]", _server.Name)); } catch (UnauthorizedAccessException) { var retryMessage = retryAttempt < RetryAttempts ? "Will retry." : "Retries failed and will abort."; Logger.Verbose(string.Format("Access denied when deleting WebDeploy files on remote server [{0}]. {1}", _server.Name, retryMessage)); } catch (IOException) { var retryMessage = retryAttempt < RetryAttempts ? "Will retry." : "Retries failed and will abort."; Logger.Verbose(string.Format("Unable to delete Web Deploy files on remote server [{0}]. {1}", _server.Name, retryMessage)); } catch (Exception ex) { var retryMessage = retryAttempt < RetryAttempts ? "Will retry." : "Retries failed and will abort."; Logger.Verbose(string.Format("Unhandled exception occoured while removing Web Deploy on remote server [{0}]. {1}", _server.Name, retryMessage), ex); } if (_remoteNeedsCleanup) { if (++retryAttempt > RetryAttempts) { _remoteNeedsCleanup = false; Logger.Warn(string.Format("Failed to cleanup WebDeploy files on remote server [{0}]", _server.Name)); } else { Thread.Sleep(RetryInterval * 1000); } } } while (_remoteNeedsCleanup); } } }