Example #1
0
        private const string APP_NAME = "七牛云盘"; // 应用程序名称

        #endregion Fields

        #region Methods

        // 检查相同进程是否正在运行
        // 返回:true=有相同进程; false=没有相同进程
        public static bool CheckSameProcess()
        {
            // 判断是否存在禁止检查标识
            if (File.Exists("Data\\UAC.SIGN"))
            {
                File.Delete("Data\\UAC.SIGN");
                // 创建UAC模式标识
                FileStream fs = File.Create("Data\\UACMODE.SIGN");
                fs.Dispose();
            }
            else
            {
                // 获取同名进程数量
                Process[] procs = Process.GetProcessesByName(APP_NAME);
                // 判断返回的进程数组长度,如果数组长度大于1则说明相同程序已经启动
                if (procs.Length <= 1) return false;

                // 判断程序启动模式
                if (File.Exists("Data\\UACMODE.SIGN"))
                {
                    // 相同进程采用 UAC 模式运行
                    CharmMessageBox msgbox = new CharmMessageBox();
                    msgbox.Show("尊敬的用户您好:\n" +
                                "欢迎您使用 " + APP_NAME + "!\n\n" +
                                "由于您的系统开启了 UAC 安全控制," +
                                "程序无法进行相关操作,因此您需要手动恢复已打开的程序窗口!\n\n" +
                                "感谢您对 " + APP_NAME + " 的支持与理解!",
                        "温馨提示");
                }
                else
                {
                    Process currentProc = Process.GetCurrentProcess();
                    // 对比进程 ID,排除非自身进程,找到已经启动的主程序,并显示主窗口
                    foreach (Process proc in procs)
                    {
                        if (proc.Id == currentProc.Id) continue;
                        IntPtr hwnd = APIOperation.GetWindowHandle(APP_NAME);
                        APIOperation.ShowWindowForeground(hwnd);
                    }
                }
                // 检测到正在运行的相同进程
                return true;
            }

            // 没有检测到正在运行的相同进程
            return false;
        }
Example #2
0
        // 全局更新检查线程
        private void GlobalUpdateCheck()
        {
            // 检查更新
            RedrawStatusText("正在检查更新...");

            try
            {
                WebClient wb = new WebClient { Proxy = null };
                wb.Headers.Add("Cache-Control", "no-cache");
                var dict =
                    JsonConvert.DeserializeObject<Dictionary<string, dynamic>>(
                        wb.DownloadString("https://raw.github.com/Unknwon/qiniudrive/master/VERSION.json"));
                if (UPDATE_VERSION < (int)dict["version"])
                {
                    CharmMessageBox msgbox = new CharmMessageBox();
                    DialogResult result = msgbox.Show("尊敬的用户您好:\n\n" +
                        "感谢您使用 " + APP_NAME + ",更高版本已经发布。\n\n" +
                        "为了获得更好的用户体验,建议您立即更新!\n\n" +
                        "请到 github.com/Unknwon/qiniudrive 获取最新下载地址。\n\n" +
                        "或单击 是 自动跳转到下载页面。",
                        "版本升级", MessageBoxButtons.YesNo);
                    if (result == DialogResult.Yes)
                        Process.Start(dict["download_url"]);
                }
            }
            catch (Exception e)
            {
                CharmMessageBox msgbox = new CharmMessageBox();
                msgbox.Show("检查更新失败:\n\n" +
                            e.Message,
                            "错误提示", MessageBoxButtons.OK, CharmMessageBoxIcon.Error);
            }

            // 初始化七牛服务
            mRsfClient = new RSFClient(mBucket);
            mRsClient = new RSClient();
            mServerFileList = new List<SyncFile>();
            mLocalFileList = new List<SyncFile>();
            mLocalFileCache = new List<string>();
            mChangeFileList = new List<ChangeFile>();

            // 检查授权及其它设置
            VerifyAuth();
            RedrawStatusText("正在连接服务器...");

            mIsUpdateChecked = true;

            int count = 0;

            while (true)
            {
            #if(!DEBUG)
            //内存释放
                Process proc = Process.GetCurrentProcess();
                proc.MaxWorkingSet = Process.GetCurrentProcess().MaxWorkingSet;
                proc.Dispose();
            #endif
                if (((mSyncCycle != 0 && count % mSyncCycle == 0) || mIsSyncNow) &&
                    mIsVaildKeys && mIsVaildBucket && mIsVaildSyncDir)
                {
                    count = 0;
                    mIsSyncing = true;
                    Sync();
                    mIsSyncNow = false;
                    mIsSyncing = false;
                    mServerFileList.Clear();
                    mLocalFileList.Clear();
                }

                // 检查是否需要验证授权
                if (mIsNeedVerifyAuth)
                {
                    mIsNeedVerifyAuth = false;
                    VerifyAuth();
                    RedrawStatusText("等待同步");
                }

                count++;
                Thread.Sleep(1000);
            }
            // ReSharper disable once FunctionNeverReturns
        }
Example #3
0
        // 关闭按钮被单击事件
        private void btnClose_MouseClick(object sender, MouseEventArgs e)
        {
            CharmMessageBox msgbox;
            DialogResult result;

            if (mBtnApply.Enabled)
            {
                msgbox = new CharmMessageBox();
                result = msgbox.Show("您有修改未保存,是否保存?",
                   "操作确认", MessageBoxButtons.YesNo, CharmMessageBoxIcon.Question);

                if (result == DialogResult.Yes)
                    mBtnApply_MouseClick(sender, e);
            }

            msgbox = new CharmMessageBox();
            result = msgbox.Show("您确定要退出 " + APP_NAME + " 吗?",
               "退出确认", MessageBoxButtons.YesNo, CharmMessageBoxIcon.Question);

            if (result == DialogResult.Yes)
                this.Close();
        }
Example #4
0
 // 查看 SecretKey 按钮被单击事件
 private void btnViewSecretKey_MouseClick(object sender, MouseEventArgs e)
 {
     CharmMessageBox msgbox = new CharmMessageBox();
     string secretKey = ((CharmTextBox)mSyncSettingControls[3]).Text;
     if (secretKey.Length == 0)
         msgbox.Show("尊敬的用户您好:\n" +
                 "您尚未填写任何 SecretKey,请到七牛开发者中心获取!",
                 "查看密钥", MessageBoxButtons.OK, CharmMessageBoxIcon.Warning);
     else
         msgbox.Show("尊敬的用户您好:\n" +
                     "以下为您的 SecretKey,请妥善保管!\n\n" + secretKey,
                     "查看密钥");
 }
Example #5
0
 // 托盘菜单被单击事件
 private void mTaryMenu_MenuClick(int clickIndex)
 {
     // 判断用户单击的菜单项
     switch (clickIndex)
     {
         case 0: // 设置中心
             mNotifyIcon_MouseClick(new object(), new MouseEventArgs(MouseButtons.Left, 0, 0, 0, 0));
             break;
         case 1: // 打开同步目录
             if (mIsVaildSyncDir)
                 Process.Start(mSyncDir);
             else
             {
                 CharmMessageBox msgbox = new CharmMessageBox();
                 msgbox.Show("您的操作由于以下原因导致失败:\n\n" +
                     "- 未设置有效的同步目录",
                     "操作失败", MessageBoxButtons.OK, CharmMessageBoxIcon.Error);
             }
             break;
         case 3: // 立即同步
             mIsSyncNow = true;
             break;
         case 5: // 关于
             mMenuSelectedIndex = 3;
             ShowPanels();
             this.Invalidate();
             mNotifyIcon_MouseClick(new object(), new MouseEventArgs(MouseButtons.Left, 0, 0, 0, 0));
             break;
         case 6: // 退出
             btnClose_MouseClick(new object(), new MouseEventArgs(MouseButtons.Left, 0, 0, 0, 0));
             break;
     }
 }