int GetSiteConfiguration(Guid guid, out string output)
        {
            AdministrationConfiguration configuration = SlkAdministration.LoadConfiguration(guid);

            if (configuration.IsNewConfiguration)
            {
                output = FormatString(culture.Resources.StsInvalidGuid, guid);
                return((int)ErrorCodes.GeneralError);
            }
            else
            {
                output = FormatString(culture.Resources.StsGetSiteConfiguration,
                                      configuration.DatabaseServer,
                                      configuration.DatabaseName,
                                      configuration.InstructorPermission,
                                      configuration.LearnerPermission);
                return(0);
            }
        }
        int Configure(out string output)
        {
            // parse parameters
            bool   forApplication       = BooleanValue("application");
            string url                  = Value("url");
            string databaseServer       = Value("databaseServer");
            string databaseName         = Value("databaseName");
            bool   createDatabase       = BooleanValue("createDatabase");
            string instructorPermission = Value("instructorPermission");
            string learnerPermission    = Value("learnerPermission");
            string observerPermission   = Value("observerPermission");
            bool   createPermissions    = BooleanValue("createPermissions");
            string settingsFileName     = Value("settingsFileName");

            if (string.IsNullOrEmpty(settingsFileName))
            {
                settingsFileName = Value("uploadSlkSettings");
            }

            bool defaultSlkSettings = BooleanValue("defaultSlkSettings");

            if (string.IsNullOrEmpty(url))
            {
                output = FormatString(culture.Resources.StsMissingParameter, "url");
                return((int)ErrorCodes.SyntaxError);
            }

            //   -- can't specify both -uploadslksettings and -defaultslksettings
            if (settingsFileName != null && defaultSlkSettings)
            {
                output = FormatString(culture.Resources.StsSettingsError, "settingsFileName", "defaultSlkSettings");
                return((int)ErrorCodes.SyntaxError);
            }

            Guid   id;
            string userName;

            // perform the operation
            if (forApplication)
            {
                SPWebApplication application = SPWebApplication.Lookup(new Uri(url));
                id       = application.Id;
                userName = application.ApplicationPool.Username;
            }
            else
            {
                using (SPSite site = new SPSite(url))
                {
                    id       = site.ID;
                    url      = site.Url;
                    userName = site.WebApplication.ApplicationPool.Username;
                }
            }

            AdministrationConfiguration configuration = SlkAdministration.LoadConfiguration(id);

            databaseServer       = ValueIfMissing(databaseServer, configuration.DatabaseServer);
            databaseName         = ValueIfMissing(databaseName, configuration.DatabaseName);
            instructorPermission = ValueIfMissing(instructorPermission, configuration.InstructorPermission);
            learnerPermission    = ValueIfMissing(learnerPermission, configuration.LearnerPermission);
            observerPermission   = ValueIfMissing(observerPermission, configuration.ObserverPermission);

            // load SlkSchema.sql if the parameters specify creating the database;
            // SlkSchema.sql is in the same directory as this .exe file
            string schemaFileContents = null;

            if (createDatabase)
            {
                schemaFileContents = culture.Resources.SlkSchemaSql;
            }

            // load the default SLK Settings file into <defaultSettingsFileContents>
            string defaultSettingsFileContents = culture.Resources.SlkSettingsFile;

            // load the SLK Settings file to upload into <settingsFileContents> if specified by the parameters.
            string settingsFileContents = null;

            if (settingsFileName != null)
            {
                settingsFileContents = System.IO.File.ReadAllText(settingsFileName);
            }
            else if (defaultSlkSettings)
            {
                settingsFileContents = defaultSettingsFileContents;
            }

            // Save the configuration
            SlkAdministration.SaveConfiguration(id, databaseServer, databaseName,
                                                schemaFileContents, instructorPermission, learnerPermission, observerPermission, createPermissions,
                                                settingsFileContents, defaultSettingsFileContents, userName);

            if (forApplication)
            {
                output = FormatString(culture.Resources.StsConfiguringSlkForApplication, url, id);
            }
            else
            {
                output = FormatString(culture.Resources.StsConfiguringSlkForSite, url, id);
            }

            return(0);
        }