private static bool UnregisterEventHandlers(DialogMgr_srv i_dmSrv)
        {
            bool bRet = true;

            ISMessaging.Delivery.ISMDistributer.ISMDistributerEventHandler dmh = new ISMessaging.Delivery.ISMDistributer.ISMDistributerEventHandler(i_dmSrv.NewMsg);
            DMEvHook.MsgDistr.ISMMsg -= dmh;

            return(bRet);
        }
        static void Main(string[] args)
        {
            bool bRes;

            DialogMgr_srv.eDMResult eRes  = DialogMgr_srv.eDMResult.eUnknown;
            DialogMgr_srv           dmSrv = null;
            string        sPath;
            string        sDisableKeyboard = "", sVer = "";
            AssemblyName  asmName = null;
            ILegacyLogger logger  = null;

            // Name the main thread
            Thread.CurrentThread.Name = "DialogMgrMainT";

            // Set up the logger(s)
            sPath  = ConfigurationManager.AppSettings["LogFilePath"];
            logger = new LegacyLogger();
            logger.Init("", "", Thread.CurrentThread.Name, "", "", sPath);
            bRes = logger.Open();
            if (!bRes)
            {
                Console.Error.WriteLine("DialogMgr failed to open the logger!");
            }
            else
            {
                asmName = Assembly.GetAssembly(typeof(DialogMgr_Console.DialogMgr)).GetName();
                sVer    = asmName.Version.ToString();
                logger.Log(Level.Info, "DialogMgr v" + sVer);

                bRes = LoadCustomAssemblies(logger);

                bRes = RemotingConfig(logger);

                dmSrv = new DialogMgr_srv(logger);
                bRes  = RegisterEventHandlers(dmSrv);

                if (bRes)
                {
                    bRes = dmSrv.CreateWorkerThreads("");

                    //Console.WriteLine("DialogMgr_Console startup successful.");
                    logger.Log(Level.Info, "DialogMgr_Console startup successful.");

                    sDisableKeyboard = ConfigurationManager.AppSettings["DisableKeyboard"];
                    sDisableKeyboard = (sDisableKeyboard == null) ? "" : sDisableKeyboard;
                    if (sDisableKeyboard == "false")
                    {
                        // Start processing messages
                        eRes = dmSrv.ProcessKbMsgLoop();
                    }

                    // Join worker threads before exiting
                    dmSrv.JoinWorkerThreads();

                    // Clean up
                    UnregisterEventHandlers(dmSrv);
                }
                else
                {
                    //Console.WriteLine("DialogMgr_Console startup unsuccessful!!!");
                    logger.Log(Level.Exception, "DialogMgr_Console startup unsuccessful!!!");
                }

                logger.Log(Level.Info, "DialogMgr_Console shutdown.");
                logger.Close();
            }
        }