You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET如何获取Windows 10/11的全部开机启动项?

在.NET中获取全部Windows开机启动项

你之前只读取了Run路径的注册表项,这只是Windows开机启动项的一部分,要获取全部19个,需要覆盖以下几个核心来源:

一、需要检查的启动项来源

  • 注册表的Run/RunOnce键(含64位系统的32位兼容分支)
  • 当前用户和公共用户的Startup文件夹
  • 任务计划程序中设置为开机/登录触发的任务

1. 读取注册表中的启动项

Windows 64位系统会为32位程序单独保留Wow6432Node分支,所以要同时检查常规路径和这个分支,还要覆盖CurrentUser和LocalMachine两个根键。

using Microsoft.Win32;
using System.Collections.Generic;

public static Dictionary<string, string> GetRegistryStartupEntries()
{
    var startupEntries = new Dictionary<string, string>();
    // 定义所有需要检查的注册表路径
    var registryPaths = new[]
    {
        @"SOFTWARE\Microsoft\Windows\CurrentVersion\Run",
        @"SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce",
        @"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run",
        @"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\RunOnce"
    };

    // 遍历两个根注册表键
    foreach (var rootKey in new[] { Registry.CurrentUser, Registry.LocalMachine })
    {
        foreach (var path in registryPaths)
        {
            using (var subKey = rootKey.OpenSubKey(path))
            {
                if (subKey == null) continue;
                // 读取当前键下的所有启动项
                foreach (var valueName in subKey.GetValueNames())
                {
                    var value = subKey.GetValue(valueName)?.ToString();
                    if (!string.IsNullOrEmpty(value) && !startupEntries.ContainsKey(valueName))
                    {
                        startupEntries.Add(valueName, value);
                    }
                }
            }
        }
    }
    return startupEntries;
}

2. 读取Startup文件夹中的快捷方式

Windows有两个Startup文件夹:一个是当前用户专属,另一个是所有用户共享的,放在这里的快捷方式会随系统开机启动。

using System.IO;
using System.Collections.Generic;

public static List<string> GetStartupFolderEntries()
{
    var startupShortcuts = new List<string>();
    // 获取当前用户和公共用户的Startup文件夹路径
    string currentUserStartup = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Startup));
    string commonUserStartup = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonStartup));

    // 遍历两个文件夹下的所有快捷方式
    foreach (var folderPath in new[] { currentUserStartup, commonUserStartup })
    {
        if (!Directory.Exists(folderPath)) continue;
        foreach (var shortcut in Directory.GetFiles(folderPath, "*.lnk"))
        {
            startupShortcuts.Add(shortcut);
        }
    }
    return startupShortcuts;
}

3. 读取任务计划中的开机触发任务

很多软件会通过Windows任务计划设置开机/登录触发的任务,这部分也是开机启动项的重要组成。需要先安装Microsoft.Win32.TaskScheduler NuGet包。

using Microsoft.Win32.TaskScheduler;
using System.Collections.Generic;

public static List<string> GetStartupTaskEntries()
{
    var startupTasks = new List<string>();
    using (var taskService = new TaskService())
    {
        // 遍历所有任务,筛选出开机或登录触发的任务
        foreach (var task in taskService.AllTasks)
        {
            bool isStartupTrigger = task.Triggers.Any(t => 
                t is LogonTrigger || t is BootTrigger);
            if (isStartupTrigger)
            {
                startupTasks.Add($"{task.Path}\\{task.Name}");
            }
        }
    }
    return startupTasks;
}

4. 整合所有来源获取全部启动项

把上面三个方法的结果整合起来,就能得到完整的开机启动项列表:

public static void CollectAllStartupEntries()
{
    // 获取注册表启动项
    var registryEntries = GetRegistryStartupEntries();
    Console.WriteLine("=== 注册表启动项 ===");
    foreach (var entry in registryEntries)
    {
        Console.WriteLine($"- {entry.Key}: {entry.Value}");
    }

    // 获取Startup文件夹快捷方式
    var folderEntries = GetStartupFolderEntries();
    Console.WriteLine("\n=== Startup文件夹快捷方式 ===");
    foreach (var entry in folderEntries)
    {
        Console.WriteLine($"- {entry}");
    }

    // 获取任务计划开机任务
    var taskEntries = GetStartupTaskEntries();
    Console.WriteLine("\n=== 任务计划开机触发任务 ===");
    foreach (var entry in taskEntries)
    {
        Console.WriteLine($"- {entry}");
    }
}

注意事项

  • 访问Registry.LocalMachine分支和系统级任务计划需要管理员权限,否则会读取不到部分项
  • 少数软件会通过服务依赖、浏览器扩展等方式启动,这些不属于常规开机启动项范畴,若需要可进一步扩展逻辑

内容的提问来源于stack exchange,提问作者Jahongir Ozodov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 08:49:54