public void RunGame(string serverAddress)
        {
            var process = new Process();

            process.StartInfo = new ProcessStartInfo()
            {
                FileName         = NFKHelper.GameExePath,
                Arguments        = NFKHelper.GetGameStartArgs(serverAddress),
                WorkingDirectory = NFKHelper.GetGameWorkingDir()
            };
            process.Start();
        }
        private bool disposedValue = false; // To detect redundant calls

        protected virtual void Dispose(bool disposing)
        {
            if (!disposedValue)
            {
                if (disposing)
                {
                    // dispose managed state (managed objects).
                }

                // TODO: free unmanaged resources (unmanaged objects) and override a finalizer below.
                // TODO: set large fields to null.

                try
                {
                    if (kbh != null)
                    {
                        kbh.UnHookKeyboard();
                    }

                    if (p != null)
                    {
                        p.Kill();
                        p.Close();
                        p = null;
                    }
                    if (Intro != null)
                    {
                        // close intro
                        Intro.CloseFlag = true;
                    }
                    StubForm.CloseFlag = true;
                    StubForm           = null;

                    // delete temp exe
                    // FIXME: it may be not deleted if there are two instances of the program are running
                    File.Delete(Path.Combine(NFKHelper.GetGameWorkingDir(), NFKHelper.GAME_EXE_TEMP));
                }
                catch (Exception e) { }

                disposedValue = true;
            }
        }
        public void Run(string fileName, bool isDemo = true)
        {
            if (isDemo && String.IsNullOrEmpty(NFKHelper.DemoFile))
            {
                return;
            }

            p           = new Process();
            p.StartInfo = new ProcessStartInfo()
            {
                FileName  = NFKHelper.GameExePathTemp,
                Arguments = isDemo
                    ? NFKHelper.GetDemoStartArgs(fileName)
                    : NFKHelper.GetSpectatorStartArgs(fileName),
                WorkingDirectory = NFKHelper.GetGameWorkingDir()
            };

            p.Start();
            sw.Start();
            GameRunning = true;
        }