当前位置: 欣欣网 > 码农

WPF效果第二百四十四篇之软件开机自启

2024-05-18码农

今天测试给反馈说:"你的程序加入开机自启动,他就是死活不启动 ";既然有问题咱们就一点点定位问题白;先来看看系统日志 :

没明白哪里的问题 ;回想起咱的程序是必须管理员权限运行;然而系统又是普通用户;想到使用系统自带的任务计划,发现结果好使:

1、那就直接代码实现吧,参考开源:

https://github.com/dahall/taskscheduler

2、创建任务计划的方法:

private void Run(){ string path = ViewModel.ExePath; string taskName = "DataCollect"; using(TaskService ts = new TaskService()) {// 检查任务是否已存在var task = ts.GetTask(taskName);if(task == null) {// 创建一个新的任务定义 TaskDefinition td = ts.NewTask(); td.RegistrationInfo.Description = "启动设备采集服务";// 创建一个触发器,设置为在系统启动后触发 BootTrigger bt = new BootTrigger {// 设置延迟30秒启动 Delay = TimeSpan.FromSeconds(30) }; td.Triggers.Add(bt);// 这里是启动咱们的软件 td.Actions.Add(new ExecAction(path, null, null));// 设置任务使用最高权限运行 td.Principal.RunLevel = TaskRunLevel.Highest;try {// 注册任务到根文件夹 ts.RootFolder.RegisterTaskDefinition(taskName, td); ViewModel.OperType = OperationTypeEnum.Success; timer.Stop(); timer.Start(); }catch(Exception ex) { ViewModel.OperType = OperationTypeEnum.Fail; } }else { Console.WriteLine("Task already exists."); } }}

3、读取注册表的方式获取软件的安装目录:

staticstringGetInstallPath(string softwareName){string baseKeyPath = @"SOFTWARE\WOW6432Node\company";// 尝试打开 'company' 键using(RegistryKey baseKey = Registry.LocalMachine.OpenSubKey(baseKeyPath)) {if(baseKey != null) {// 检查是否存在 "设备采集程序" 子键using(RegistryKey subKey = baseKey.OpenSubKey(softwareName)) {if(subKey != null) {//安装路径存储在名为 "Path" 的键中string pathValue = subKey.GetValue("Path") asstring;return pathValue; } } } }returnnull;}

4、安装目录有了,那就直接创建任务计划:

5、看看成功后的任务计划结果:

编程不息、Bug不止、无Bug、无生活 ; bug 的冷静、编码的激情、完成后的喜悦、挖坑的激动 、填坑的兴奋;这也许就是屌丝程序员的乐趣吧; 今天就到这里吧;希望自己有动力一步一步坚持下去;生命不息,代码不止;大家抽空可以看看今天分享的效果,有好的意见和想法,可以在留言板随意留言;我看到后会第一时间回复大家,多谢大家的一直默默的关注和支持! 如果觉得不错,那就伸出您的小手点个赞并关注一下,多谢您的支持!