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; }
// 全局更新检查线程 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 }
// 关闭按钮被单击事件 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(); }
// 查看 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, "查看密钥"); }
// 托盘菜单被单击事件 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; } }