C# UAC自提升与用户体验
2017-09-07 13:21
239 查看
C# UAC自提升与用户体验
最近买了Wallpaper Engine玩玩,其中一个功能感觉很好,就是这个Wallpaper Engine在启动时没有要求用户配置权限,只在必要时启动一个进程来操作一些需要管理员权限的东西。这样用户不用每次启动都配置UAC,节省了很多时间,也增加了安全性。
涉及的代码很简单,就是Process.Start
ProcessStartInfo psi = new ProcessStartInfo(); psi.FileName = "test.exe"; psi.Verb = "runas"; psi.Arguments = ""; Process.Start(psi);
需要管理员权限的操作都被放到了另外一个可执行文件里,也可以放在当前文件里通过命令行参数来选择功能。
马上实践一下,当点击Accept程序会根据用户的设置来配置系统右键菜单。
private void simpleButtonAccept_Click(object sender, EventArgs e) { bool completeFlag = true; //配置完成标志 //导入用户设置 this.BackupTools.SelectedBackupPath = this.textEditSelectedPath.EditValue as string; this.BackupTools.SavedBackupPathList = this.GetSavedPathList(); //判断是否需要配置 if ((this.BackupTools.RightClickMenuBackup != this.checkEditRcmBackup.Checked) || (this.BackupTools.RightClickMenuExportBackup != this.checkEditRcmExportBackup.Checked)) { ProcessStartInfo psi = new ProcessStartInfo(); //执行文件为当前文件 psi.FileName = Application.ExecutablePath; psi.Verb = "runas"; //设置命令行参数 string args = "Register "; if (this.checkEditRcmBackup.Checked == true) { args = args + "Backup "; } if (this.checkEditRcmExportBackup.Checked == true) { args = args + "Export "; } psi.Arguments = args; try { Process.Start(psi); this.BackupTools.RightClickMenuBackup = this.checkEditRcmBackup.Checked; this.BackupTools.RightClickMenuExportBackup = this.checkEditRcmExportBackup.Checked; } catch (Exception) { completeFlag = false; } } //刷新显示 BackupToolsForm_Load(this, null); if (completeFlag == true) { SetStatusMessage("Setting Complete"); } else { SetStatusMessage("Setting Faild"); } //保存配置 ConfigTools.Save(this.BackupTools); }
在程序启动时判断一下命令行参数
class Program { private static BackupTools BackupTools = new BackupTools(); [STAThread] static void Main(string[] args) { //获取默认配置 ConfigTools.Settings = Settings.Default; //导入配置 ConfigTools.Load(BackupTools); //若没有命令行参数就打开窗体 if (args.Length <= 0) { BackupToolsForm form = new BackupToolsForm(); form.BackupTools = BackupTools; Application.Run(form); ConfigTools.Save(BackupTools); } else { //获取参数 string switchStr = args[0].ToUpper(); List<string> pathList = new List<string>(); if (args.Length >= 2) { for (int i = 1; i < args.Length; i++) { pathList.Add(args[i]); } } if (switchStr.Equals("BackupFile".ToUpper())) { BackupTools.BackupFile(pathList[0]); } else if (switchStr.Equals("BackupFolder".ToUpper())) { BackupTools.BackupFolder(pathList[0]); } else if (switchStr.Equals("Export".ToUpper())) { BackupTools.OpenSavedFolder(pathList[0]); } else if (switchStr.Equals("Register".ToUpper())) { //根据参数注册到右键菜单 BackupTools.DeregisterToRightMenu(); foreach (string str in pathList) { if (str.ToUpper().Equals("Backup".ToUpper())) { BackupTools.RegisterBackupToRightclickMenu(); } else if (str.ToUpper().Equals("Export".ToUpper())) { BackupTools.RegisterExportBackupToRightClickMenu(); } } } } } }
相关文章推荐
- paip.提升用户体验----c++ c# 配色方案
- C#微信公众号接口开发,灵活利用网页授权、带参数二维码、模板消息,提升用户体验之完成用户绑定个人微信及验证码获取
- javascript之表单验证 完美提升用户体验
- Atitit.hybrid混合型应用 浏览器插件,控件的实现方式 浏览器运行本地程序的解决方案大的总结---提升用户体验and开发效率..
- 电商提升用户体验的几个方面
- 使用渐进式JPEG来提升用户体验
- Atitit 提升用户体验 生物识别 与登录 身份验证
- 提升用户体验!29个使用动画效果的网站布局
- 惊奇发现百度首页用户体验提升
- 提升网站用户体验的七个妙招
- 【Android】提升用户体验,ListView显示加载中动画及空数据视图
- 阿里云全新推出轻量应用服务器,致力提升用户服务器使用体验
- paip.提升用户体验---上传文件图片命名
- paip.提升用户体验之全角半角
- 提升Web用户体验的71个设计要点
- 提升网站用户体验的几个建议
- Android 加速应用运行效果的10个技巧 内存优化 提升用户体验
- 提升用户体验
- JS展望之 - 提升用户体验
- 提升用户体验的7大微交互