/// <summary>
        /// Start OSVR server
        /// </summary>
        public void StartServer(bool restart = false)
        {
            string configArgs = string.Empty;

            // is the "Use Custom Config" option checked
            if (m_contextMenu.CustomServerConfigChecked)
            {
                string targetCustomConfig = Properties.Settings.Default.targetCustomConfig;
                // has the user specified a custom config?
                if (!string.IsNullOrEmpty(targetCustomConfig) && File.Exists(targetCustomConfig))
                {
                    configArgs = targetCustomConfig;
                }
                else
                {
                    Common.ShowMessageBox(Common.MSG_MISSING_CUSTOM_CONFIG, MessageBoxButtons.OK, MessageBoxIcon.Error, true);
                    return;
                }
            }
            else
            {
                switch (m_contextMenu.DetectHDKType())
                {
                case ContextMenuWYSIWYG.HDKType.HDK1:
                    if (NativeHelpers.IsExtendedModeEnabled())
                    {
                        if (m_contextMenu.UseIRCameraChecked)
                        {
                            configArgs = Common.CFG_1X_EM_CAM;
                        }
                        else
                        {
                            configArgs = Common.CFG_1X_EM_NOCAM;
                        }
                    }
                    else
                    {
                        if (m_contextMenu.UseIRCameraChecked)
                        {
                            configArgs = Common.CFG_1X_DM_CAM;
                        }
                        else
                        {
                            configArgs = Common.CFG_1X_DM_NOCAM;
                        }
                    }
                    break;

                case ContextMenuWYSIWYG.HDKType.HDK2:
                    if (NativeHelpers.IsExtendedModeEnabled())
                    {
                        if (m_contextMenu.UseIRCameraChecked)
                        {
                            configArgs = Common.CFG_2_EM_CAM;
                        }
                        else
                        {
                            configArgs = Common.CFG_2_EM_NOCAM;
                        }
                    }
                    else
                    {
                        if (m_contextMenu.UseIRCameraChecked)
                        {
                            configArgs = Common.CFG_2_DM_CAM;
                        }
                        else
                        {
                            configArgs = Common.CFG_2_DM_NOCAM;
                        }
                    }
                    break;

                case ContextMenuWYSIWYG.HDKType.UNKNOWN:
                    Common.ShowMessageBox(Common.MSG_UNABLE_TO_DETECT_HDK_TYPE, MessageBoxButtons.OK, MessageBoxIcon.Error, true);
                    return;

                default:
                    // error case already shows error message
                    return;
                }
            }

            string  osvrPath         = OSVRRegistry.GetInstallDirectoryFromRegistry();
            string  completeFilePath = osvrPath + Common.SERVICE_PATH + Common.SERVICE_NAME;
            string  workingDirectory = osvrPath + Common.SERVICE_PATH;
            Process server           = OSVRProcessManager.LaunchExecutable(completeFilePath,
                                                                           workingDirectory,
                                                                           ProcessWindowStyle.Minimized, // Note: this is ignored
                                                                           configArgs,
                                                                           false);

            if (server == null)
            {
                Common.ShowMessageBox(Common.MSG_UNABLE_TO_START_SERVER, MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            if (!m_console.Visible)
            {
                ShowServerConsole();
            }

            m_console.ServerStateChanged(restart ? ServerConsole.ServerState.Restart : ServerConsole.ServerState.Start);

            server.BeginOutputReadLine();
            server.BeginErrorReadLine();
            server.EnableRaisingEvents = true;
            server.OutputDataReceived += Server_OutputDataReceived;
            server.ErrorDataReceived  += Server_ErrorDataReceived;
        }