Inheritance: InMemoryConfiguration
		private static void RunInDebugMode(RavenFileSystemConfiguration ravenConfiguration, bool launchBrowser)
		{
			ConfigureLogging();

			NonAdminHttp.EnsureCanListenToWhenInNonAdminContext(ravenConfiguration.Port);

			var sp = Stopwatch.StartNew();

			var hostingService = new HostingService
				                     {
					                     Configuration = ravenConfiguration
				                     };

			hostingService.Start();

			Console.WriteLine("Raven FS is ready to process requests.");
			Console.WriteLine("\tServer started in {0:#,#;;0} ms", sp.ElapsedMilliseconds);
			Console.WriteLine("\tData directory: {0}", ravenConfiguration.DataDirectory);
			Console.WriteLine("\tServer Url: {0}", ravenConfiguration.ServerUrl);

			if (launchBrowser)
			{
				try
				{
					Process.Start(ravenConfiguration.ServerUrl);
				}
				catch (Exception e)
				{
					Console.WriteLine("Could not start browser: " + e.Message);
				}
			}

			InteractiveRun();

			hostingService.Stop();
		}
		private static void InteractiveRun(string[] args)
		{
			Action actionToTake = null;
			bool launchBrowser = false;
			var ravenConfiguration = new RavenFileSystemConfiguration();

			OptionSet optionSet = null;
			optionSet = new OptionSet
				            {
					            {"port=", port => ravenConfiguration.Port = int.Parse(port)},
					            {"path=", path => ravenConfiguration.DataDirectory = path},
					            {
						            "set={==}", "The configuration {0:option} to set to the specified {1:value}", (key, value) =>
							                                                                                          {
								                                                                                          ravenConfiguration
									                                                                                          .Settings[key] =
									                                                                                          value;
								                                                                                          ravenConfiguration
									                                                                                          .Initialize();
							                                                                                          }
					            },
					            {
						            "install", "Installs the RavenFS service",
						            key => actionToTake = () => AdminRequired(InstallAndStart, key)
					            },
					            {
						            "service-name=",
						            "The {0:service name} to use when installing or uninstalling the service, default to RavenFS",
						            name => ProjectInstaller.SERVICE_NAME = name
					            },
					            {
						            "uninstall", "Uninstalls the RavenFS service",
						            key => actionToTake = () => AdminRequired(EnsureStoppedAndUninstall, key)
					            },
					            {"start", "Starts the RavenFS service", key => actionToTake = () => AdminRequired(StartService, key)},
					            {
						            "restart", "Restarts the RavenFS service",
						            key => actionToTake = () => AdminRequired(RestartService, key)
					            },
					            {"stop", "Stops the RavenFS service", key => actionToTake = () => AdminRequired(StopService, key)},
					            {
						            "debug", "Runs RavenDB in debug mode",
						            key => actionToTake = () => RunInDebugMode(ravenConfiguration, launchBrowser)
					            },
					            {"browser|launchbrowser", "After the server starts, launches the browser", key => launchBrowser = true},
					            {
						            "help", "Help about the command line interface",
						            key => { actionToTake = () => PrintUsage(optionSet); }
					            },
				            };


			try
			{
				if (args.Length == 0) // we default to executing in debug mode 
					args = new[] {"--debug"};

				optionSet.Parse(args);
			}
			catch (Exception e)
			{
				Console.WriteLine(e.Message);
				PrintUsage(optionSet);
				return;
			}

			if (actionToTake == null)
				actionToTake = () => RunInDebugMode(ravenConfiguration, launchBrowser);

			actionToTake();
		}