专栏名称: dotNET跨平台
专注于.NET Core的技术传播。在这里你可以谈微软.NET,Mono的跨平台开发技术。在这里可以让你的.NET项目有新的思路,不局限于微软的技术栈,横跨Windows,Linux 主流平台
目录
相关文章推荐
程序员的那些事  ·  百度:报案了 ·  2 天前  
码农翻身  ·  穷人需要投机,别迷信长期主义 ·  昨天  
OSC开源社区  ·  地表最强「开源版PS」——GIMP ... ·  4 天前  
OSC开源社区  ·  【直播预告】AiEditor:面向AI的下一 ... ·  4 天前  
51好读  ›  专栏  ›  dotNET跨平台

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

dotNET跨平台  · 公众号  ·  · 2024-05-19 08:00

正文

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

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

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.");        }    }}






请到「今天看啥」查看全文