Esempio n. 1
0
 public Tuple <bool, string, string> CheckUpdate(string url)
 {
     try
     {
         var html = HttpHelper.Get(url).ToLower();
         var vs   = Regex.Match(html, @"latest\sversion:\s*([\d|.]*)");
         if (vs.Success)
         {
             var tmp     = vs.ToString();
             var version = tmp.Substring(tmp.IndexOf("version:") + "version:".Length + 1).Trim();
             if (Compare(_ignoreVersion, version))
             {
                 if (Compare(version))
                 {
                     return(new Tuple <bool, string, string>(true, version, url));
                 }
             }
         }
     }
     catch (Exception e)
     {
         SimpleLogHelper.Warning(e);
     }
     return(new Tuple <bool, string, string>(false, "", url));
 }
Esempio n. 2
0
        /// <summary>
        /// use it after Show() has been called
        /// </summary>
        public void SetHotKey()
        {
            GlobalHotkeyHooker.Instance.Unregist(this);
            var r     = GlobalHotkeyHooker.Instance.Regist(this, SystemConfig.Instance.QuickConnect.HotKeyModifiers, SystemConfig.Instance.QuickConnect.HotKeyKey, this.ShowMe);
            var title = SystemConfig.Instance.Language.GetText("messagebox_title_warning");

            switch (r.Item1)
            {
            case GlobalHotkeyHooker.RetCode.Success:
                break;

            case GlobalHotkeyHooker.RetCode.ERROR_HOTKEY_NOT_REGISTERED:
            {
                var msg = $"{SystemConfig.Instance.Language.GetText("info_hotkey_registered_fail")}: {r.Item2}";
                SimpleLogHelper.Warning(msg);
                MessageBox.Show(msg, title);
                break;
            }

            case GlobalHotkeyHooker.RetCode.ERROR_HOTKEY_ALREADY_REGISTERED:
            {
                var msg = $"{SystemConfig.Instance.Language.GetText("info_hotkey_already_registered")}: {r.Item2}";
                SimpleLogHelper.Warning(msg);
                MessageBox.Show(msg, title);
                break;
            }

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
Esempio n. 3
0
        private void RdpcOnDisconnected(object sender, IMsTscAxEvents_OnDisconnectedEvent e)
        {
            _isDisconned = true;
            ResizeEndStopFireDelegate();
            if (this._onResizeEnd != null)
            {
                this._onResizeEnd -= ReSizeRdp;
            }

            const int UI_ERR_NORMAL_DISCONNECT = 0xb08;
            string    reason = _rdp.GetErrorDescription((uint)e.discReason, (uint)_rdp.ExtendedDisconnectReason);

            if (e.discReason != UI_ERR_NORMAL_DISCONNECT)
            {
                SimpleLogHelper.Warning($"RDP({_rdpServer.DispName}) exit with error code {e.discReason}({reason})");
            }
            if (e.discReason != UI_ERR_NORMAL_DISCONNECT &&
                e.discReason != (int)EDiscReason.exDiscReasonAPIInitiatedDisconnect &&
                e.discReason != (int)EDiscReason.exDiscReasonAPIInitiatedLogoff &&
                reason != "")
            {
                string disconnectedText = $"{_rdpServer.DispName}({_rdpServer.Address}) : {reason}";
                var    t = new Task(() =>
                {
                    System.Windows.MessageBox.Show(disconnectedText, SystemConfig.Instance.Language.GetText("messagebox_title_info"), MessageBoxButton.OK, MessageBoxImage.Warning);
                });
                t.Start();
            }
            base.OnClosed?.Invoke(base.ConnectionId);
        }
Esempio n. 4
0
        private void RegPuttySessionInRegTable()
        {
            // set key
            if (_protocolPuttyBase is ProtocolServerSSH server &&
                !string.IsNullOrEmpty(server.PrivateKey))
            {
                var ppk = server.PrivateKey;
                if (SystemConfig.Instance.DataSecurity.Rsa != null)
                {
                    ppk = SystemConfig.Instance.DataSecurity.Rsa.DecodeOrNull(ppk);
                }
                Debug.Assert(ppk != null);
                _puttyOption.Set(PuttyRegOptionKey.PublicKeyFile, ppk);
            }

            // set color theme
            _puttyOption.Set(PuttyRegOptionKey.FontHeight, SystemConfig.Instance.Theme.PuttyFontSize);
            var options = SystemConfig.Instance.Theme.SelectedPuttyTheme;

            if (options != null)
            {
                foreach (var option in options)
                {
                    try
                    {
                        if (Enum.TryParse(option.Key, out PuttyRegOptionKey key))
                        {
                            if (option.ValueKind == RegistryValueKind.DWord)
                            {
                                _puttyOption.Set(key, (int)(option.Value));
                            }
                            else
                            {
                                _puttyOption.Set(key, (string)option.Value);
                            }
                        }
                    }
                    catch (Exception)
                    {
                        SimpleLogHelper.Warning($"Putty theme error: can't set up key(value)=> {option.Key}({option.ValueKind})");
                    }
                }
            }


            //_puttyOption.Set(PuttyRegOptionKey.Colour0, "255,255,255");
            //_puttyOption.Set(PuttyRegOptionKey.Colour1, "255,255,255");
            //_puttyOption.Set(PuttyRegOptionKey.Colour2, "51,51,51");
            //_puttyOption.Set(PuttyRegOptionKey.Colour3, "85,85,85");
            //_puttyOption.Set(PuttyRegOptionKey.Colour4, "0,0,0");
            //_puttyOption.Set(PuttyRegOptionKey.Colour5, "0,255,0");
            //_puttyOption.Set(PuttyRegOptionKey.Colour6, "77,77,77");
            //_puttyOption.Set(PuttyRegOptionKey.Colour7, "85,85,85");
            //_puttyOption.Set(PuttyRegOptionKey.Colour8, "187,0,0");
            //_puttyOption.Set(PuttyRegOptionKey.Colour9, "255,85,85");
            //_puttyOption.Set(PuttyRegOptionKey.Colour10, "152,251,152");
            //_puttyOption.Set(PuttyRegOptionKey.Colour11, "85,255,85");
            //_puttyOption.Set(PuttyRegOptionKey.Colour12, "240,230,140");
            //_puttyOption.Set(PuttyRegOptionKey.Colour13, "255,255,85");
            //_puttyOption.Set(PuttyRegOptionKey.Colour14, "205,133,63");
            //_puttyOption.Set(PuttyRegOptionKey.Colour15, "135,206,235");
            //_puttyOption.Set(PuttyRegOptionKey.Colour16, "255,222,173");
            //_puttyOption.Set(PuttyRegOptionKey.Colour17, "255,85,255");
            //_puttyOption.Set(PuttyRegOptionKey.Colour18, "255,160,160");
            //_puttyOption.Set(PuttyRegOptionKey.Colour19, "255,215,0");
            //_puttyOption.Set(PuttyRegOptionKey.Colour20, "245,222,179");
            //_puttyOption.Set(PuttyRegOptionKey.Colour21, "255,255,255");


            //_puttyOption.Set(PuttyRegOptionKey.Colour0, "192,192,192");
            //_puttyOption.Set(PuttyRegOptionKey.Colour1, "255,255,255");
            //_puttyOption.Set(PuttyRegOptionKey.Colour2, "0,0,0");
            //_puttyOption.Set(PuttyRegOptionKey.Colour3, "85,85,85");
            //_puttyOption.Set(PuttyRegOptionKey.Colour4, "0,0,0");
            //_puttyOption.Set(PuttyRegOptionKey.Colour5, "0,255,0");
            //_puttyOption.Set(PuttyRegOptionKey.Colour6, "0,0,0");
            //_puttyOption.Set(PuttyRegOptionKey.Colour7, "85,85,85");
            //_puttyOption.Set(PuttyRegOptionKey.Colour8, "255,0,255");
            //_puttyOption.Set(PuttyRegOptionKey.Colour9, "255,85,85");
            //_puttyOption.Set(PuttyRegOptionKey.Colour10,"0,255,0");
            //_puttyOption.Set(PuttyRegOptionKey.Colour11,"85,255,85");
            //_puttyOption.Set(PuttyRegOptionKey.Colour12,"187,187,0");
            //_puttyOption.Set(PuttyRegOptionKey.Colour13,"255,255,85");
            //_puttyOption.Set(PuttyRegOptionKey.Colour14,"0,255,255");
            //_puttyOption.Set(PuttyRegOptionKey.Colour15,"0,0,255");
            //_puttyOption.Set(PuttyRegOptionKey.Colour16,"0,0,255");
            //_puttyOption.Set(PuttyRegOptionKey.Colour17,"255,85,255");
            //_puttyOption.Set(PuttyRegOptionKey.Colour18,"0,187,187");
            //_puttyOption.Set(PuttyRegOptionKey.Colour19,"85,255,255");
            //_puttyOption.Set(PuttyRegOptionKey.Colour20,"187,187,187");
            //_puttyOption.Set(PuttyRegOptionKey.Colour21,"255,255,255");


            //_puttyOption.Set(PuttyRegOptionKey.UseSystemColours, 0);
            //_puttyOption.Set(PuttyRegOptionKey.TryPalette, 0);
            //_puttyOption.Set(PuttyRegOptionKey.ANSIColour, 1);
            //_puttyOption.Set(PuttyRegOptionKey.Xterm256Colour, 1);
            //_puttyOption.Set(PuttyRegOptionKey.BoldAsColour, 1);

            //_puttyOption.Set(PuttyRegOptionKey.Colour0, "211,215,207");
            //_puttyOption.Set(PuttyRegOptionKey.Colour1, "238,238,236");
            //_puttyOption.Set(PuttyRegOptionKey.Colour2, "46,52,54");
            //_puttyOption.Set(PuttyRegOptionKey.Colour3, "85,87,83");
            //_puttyOption.Set(PuttyRegOptionKey.Colour4, "0,0,0");
            //_puttyOption.Set(PuttyRegOptionKey.Colour5, "0,255,0");
            //_puttyOption.Set(PuttyRegOptionKey.Colour6, "46,52,54");
            //_puttyOption.Set(PuttyRegOptionKey.Colour7, "85,87,83");
            //_puttyOption.Set(PuttyRegOptionKey.Colour8, "204,0,0");
            //_puttyOption.Set(PuttyRegOptionKey.Colour9, "239,41,41");
            //_puttyOption.Set(PuttyRegOptionKey.Colour10,"78,154,6");
            //_puttyOption.Set(PuttyRegOptionKey.Colour11,"138,226,52");
            //_puttyOption.Set(PuttyRegOptionKey.Colour12,"196,160,0");
            //_puttyOption.Set(PuttyRegOptionKey.Colour13,"252,233,79");
            //_puttyOption.Set(PuttyRegOptionKey.Colour14,"52,101,164");
            //_puttyOption.Set(PuttyRegOptionKey.Colour15,"114,159,207");
            //_puttyOption.Set(PuttyRegOptionKey.Colour16,"117,80,123");
            //_puttyOption.Set(PuttyRegOptionKey.Colour17,"173,127,168");
            //_puttyOption.Set(PuttyRegOptionKey.Colour18,"6,152,154");
            //_puttyOption.Set(PuttyRegOptionKey.Colour19,"52,226,226");
            //_puttyOption.Set(PuttyRegOptionKey.Colour20,"211,215,207");
            //_puttyOption.Set(PuttyRegOptionKey.Colour21,"238,238,236");


            _puttyOption.Save();
        }
Esempio n. 5
0
        private void App_OnStartup(object sender, StartupEventArgs startupEvent)
        {
            try
            {
                {
                    var appDateFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), SystemConfig.AppName);
                    if (!Directory.Exists(appDateFolder))
                    {
                        Directory.CreateDirectory(appDateFolder);
                    }
                    var logFilePath = Path.Combine(appDateFolder, "PRemoteM.log.md");
                    SimpleLogHelper.LogFileName = logFilePath;
                }

                #region single-instance app
                var startupMode = PRM.Core.Ulits.StartupMode.Normal;
                if (startupEvent.Args.Length > 0)
                {
                    System.Enum.TryParse(startupEvent.Args[0], out startupMode);
                }
                if (startupMode == PRM.Core.Ulits.StartupMode.SetSelfStart)
                {
                    SetSelfStartingHelper.SetSelfStart();
                    Environment.Exit(0);
                }
                if (startupMode == PRM.Core.Ulits.StartupMode.UnsetSelfStart)
                {
                    SetSelfStartingHelper.UnsetSelfStart();
                    Environment.Exit(0);
                }
                _singleAppMutex = new Mutex(true, PipeName, out var isFirst);
                if (!isFirst)
                {
                    try
                    {
                        var client = new NamedPipeClientStream(PipeName);
                        client.Connect();
                        StreamReader reader = new StreamReader(client);
                        StreamWriter writer = new StreamWriter(client);
                        writer.WriteLine("ActivateMe");
                        writer.Flush();
                        client.Dispose();
                    }
                    catch (Exception e)
                    {
                        SimpleLogHelper.Warning(e);
                    }

                    Environment.Exit(0);
                }
                else
                {
                    Task.Factory.StartNew(() =>
                    {
                        NamedPipeServerStream server = null;
                        while (true)
                        {
                            server?.Dispose();
                            server = new NamedPipeServerStream(PipeName);
                            SimpleLogHelper.Debug("NamedPipeServerStream.WaitForConnection");
                            server.WaitForConnection();

                            try
                            {
                                var reader = new StreamReader(server);
                                var line   = reader.ReadLine();
                                if (!string.IsNullOrEmpty(line))
                                {
                                    SimpleLogHelper.Debug("NamedPipeServerStream get: " + line);
                                    if (line == "ActivateMe")
                                    {
                                        if (App.Window != null)
                                        {
                                            Dispatcher.Invoke(() =>
                                            {
                                                if (App.Window.WindowState == WindowState.Minimized)
                                                {
                                                    App.Window.WindowState = WindowState.Normal;
                                                }
                                                App.Window.ActivateMe();
                                            });
                                        }
                                    }
                                }
                            }
                            catch (Exception e)
                            {
                                SimpleLogHelper.Warning(e);
                            }
                        }
                    });
                }
                #endregion


#if DEBUG
                Shawn.Ulits.ConsoleManager.Show();
#endif

                #region system check & init


                #region Init
                {
                    var appDateFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), SystemConfig.AppName);
                    if (!Directory.Exists(appDateFolder))
                    {
                        Directory.CreateDirectory(appDateFolder);
                    }
                    SimpleLogHelper.LogFileName = Path.Combine(appDateFolder, "PRemoteM.log.md");
                    var iniPath = Path.Combine(appDateFolder, SystemConfig.AppName + ".ini");
                    if (Environment.CurrentDirectory.IndexOf(@"C:\Windows") < 0)
                    {
                        if (File.Exists(SystemConfig.AppName + ".ini") ||
                            IOPermissionHelper.HasWritePermissionOnDir("./"))
                        {
                            iniPath = SystemConfig.AppName + ".ini";
                        }
                    }
                    var ini = new Ini(iniPath);
                    //if (!File.Exists(iniPath))
                    //{
                    //    // TODO if ini is not existed, then it would be a new user, open guide to set db path
                    //}

                    // Set default folder path
                    SystemConfigLanguage.LanguageJsonDir = Path.Combine(appDateFolder, SystemConfigLanguage.LanguageJsonDir);
                    PuttyColorThemes.ThemeRegFileFolder  = Path.Combine(appDateFolder, PuttyColorThemes.ThemeRegFileFolder);

                    var language     = new SystemConfigLanguage(this.Resources, ini);
                    var general      = new SystemConfigGeneral(ini);
                    var quickConnect = new SystemConfigQuickConnect(ini);
                    var theme        = new SystemConfigTheme(this.Resources, ini);
                    var dataSecurity = new SystemConfigDataSecurity(ini);


                    //if (!File.Exists(dataSecurity.DbPath))
                    //{
                    //    // TODO db is not existed, then tell our user to create new one or select a new one.
                    //}

                    // config create instance (settings & langs)
                    SystemConfig.Init();
                    SystemConfig.Instance.General      = general;
                    SystemConfig.Instance.Language     = language;
                    SystemConfig.Instance.QuickConnect = quickConnect;
                    SystemConfig.Instance.DataSecurity = dataSecurity;
                    SystemConfig.Instance.Theme        = theme;

                    // server data holder init.
                    GlobalData.Init();

                    // remote window pool init.
                    RemoteWindowPool.Init();
                }
                #endregion

                // kill putty process
                foreach (var process in Process.GetProcessesByName(PuttyHost.PuttyExeName.ToLower().Replace(".exe", "")))
                {
                    try
                    {
                        process.Kill();
                    }
                    catch
                    {
                    }
                }



                #endregion


                #region app start
                // main window init
                {
                    Window         = new MainWindow();
                    ShutdownMode   = ShutdownMode.OnMainWindowClose;
                    MainWindow     = Window;
                    Window.Closed += (o, args) => { AppOnClose(); };
                    if (!SystemConfig.Instance.General.AppStartMinimized)
                    {
                        ActivateWindow();
                    }

                    // check if Db is ok
                    var res = SystemConfig.Instance.DataSecurity.CheckIfDbIsOk();
                    if (!res.Item1)
                    {
                        SimpleLogHelper.Info("Start with 'SystemConfigPage' by 'ErroFlag'.");
                        MessageBox.Show(res.Item2, SystemConfig.Instance.Language.GetText("messagebox_title_error"));
                        ActivateWindow();
                        Window.VmMain.CmdGoSysOptionsPage.Execute(typeof(SystemConfigDataSecurity));
                    }
                    else
                    {
                        // load data
                        GlobalData.Instance.ServerListUpdate();
                    }
                }


                // task tray init
                InitTaskTray();


                // quick search init
                InitQuickSearch();
                #endregion
            }
            catch (Exception ex)
            {
                SimpleLogHelper.Fatal(ex.Message, ex.StackTrace);
#if DEBUG
                MessageBox.Show(ex.Message);
                MessageBox.Show(ex.StackTrace);
#endif
                AppOnClose(-1);
            }
        }