public static ActionResult RegisterProvider(Session session)
        {
            ActionResult result;

            var methodName =
                MethodBase.GetCurrentMethod().Name;

            session.Log("{0}: BEGIN", methodName);

            try
            {
                var filePath =
                    session.CustomActionData["SessionData"];

                var sessionData =
                    SessionManager.Load(filePath);

                session.Log("{0}: Product Version = {1}", methodName, sessionData.InstallerVersion);

                session.Log("{0}: VCENTERSERVER = {1}", methodName, sessionData.vCenterServer);

                session.Log("{0}: VCENTERUSERNAME = {1}", methodName, sessionData.vCenterUserName);

                session.Log("{0}: THUMBPRINT = {1}", methodName, sessionData.Certificate);

                var providerConfig =
                    ConfigManager.GetConfiguration(sessionData.Application);

                providerConfig.Id = Host.Fqdn;

                providerConfig.Name = String.Format(Properties.Resource.VasaProviderNameTemplate, Host.Fqdn);

                if (providerConfig.Name.Length > 80)
                {
                    providerConfig.Name = providerConfig.Name.Substring(0, 80);
                }

                var credentials =
                    providerConfig.Credentials;

                credentials.Login =
                    Identifier.GenerateIdentifier(6);

                credentials.Password =
                    Identifier.GenerateIdentifier(8);

                ConfigManager.SaveConfiguration(providerConfig, sessionData.Application);

                var certificate =
                    CertificateManager.GetCertificate(sessionData.Certificate, StoreName.My);

                var provider =
                    (VasaProvider)RegistrationManager.RegisterProvider(providerConfig, certificate, sessionData.vCenterServer, sessionData.vCenterUserName, sessionData.vCenterPassword);

                session.Log("{0}: provider UniqueId: {1}", methodName, provider.UniqueId);
                session.Log("{0}: provider name: {1}", methodName, provider.Name);
                session.Log("{0}: provider description: {1}", methodName, provider.Description);
                session.Log("{0}: provider version: {1}", methodName, provider.Version);
                session.Log("{0}: provider ProviderId: {1}", methodName, provider.ProviderId);
                session.Log("{0}: provider url: {1}", methodName, provider.Url);

                sessionData.ProviderUniqueId = provider.UniqueId;

                sessionData.ProviderRegistered = true;

                SessionManager.Save(filePath, sessionData);

                try
                {
                    SessionManager.Save(VimDataKeyName, VimDataValueName, sessionData);
                }
                catch (Exception e)
                {
                    session.Log("{0}: SaveVimData failed: {1}", methodName, e.Message);
                }

                result = ActionResult.Success;
            }
            catch (Exception e)
            {
                session.Log("{0}", e);

                result = ActionResult.Failure;
            }

            session.Log("{0}: RESULT = {1}", methodName, result);

            session.Log("{0}: END", methodName);

            return(result);
        }