前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >WPF效果第二百四十四篇之软件开机自启

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

作者头像
WPF程序员
发布2024-05-21 14:56:05
680
发布2024-05-21 14:56:05

今天测试给反馈说:"你的程序加入开机自启动,他就是死活不启动

";既然有问题咱们就一点点定位问题白;先来看看系统日志:

没明白哪里的问题

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

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

代码语言:javascript
复制
https://github.com/dahall/taskscheduler

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

代码语言:javascript
复制
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、读取注册表的方式获取软件的安装目录:

代码语言:javascript
复制
static string GetInstallPath(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") as string;
                    return pathValue;
                }
            }
        }
    }
    return null;
}

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

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

编程不息、Bug不止、无Bug、无生活

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-05-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 WPF程序员 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档