Exemplo n.º 1
0
        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);
                }
            }
        }