windows注册表:开机自启动程序配置

        

目录

一、注册表位置

系统范围的开机自启动程序

当前用户的开机自启动程序

二、配置步骤

三、注意事项

四、其他方法

任务计划程序

启动文件夹

1. 创建程序快捷方式

2. 打开 Startup 文件夹

3. 将快捷方式移动到 Startup 文件夹

4. 验证程序是否自动启动

注意事项

 五、开机自启动程序配置示例代码


        在Windows操作系统中,注册表是一个关键的数据库,它存储了系统和应用程序的设置和选项。设置开机自启动程序通常涉及到对注册表的修改。以下是一些关键点和注意事项。

一、注册表位置

系统范围的开机自启动程序

        路径:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run此路径下的所有键值对都指向将在系统启动时运行的程序。这个位置适用于所有用户。

当前用户的开机自启动程序

  • 路径:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
  • 这个路径下的键值对仅适用于当前登录的用户。

二、配置步骤

  1. 打开注册表编辑器

    • 按下 Win + R,输入 regedit,按回车。
  2. 导航到目标路径

    • 根据需要选择 HKEY_LOCAL_MACHINEHKEY_CURRENT_USER,然后导航到 Software\Microsoft\Windows\CurrentVersion\Run
  3. 添加新的字符串值

    • 右键点击右侧窗口,选择 新建 -> 字符串值
    • 给这个新建的值命名,可以是你要添加的程序的名字。
  4. 设置值的数据

    • 双击新建的字符串值,在“数值数据”字段中输入程序的完整路径。比如 C:\Program Files\YourProgram\YourProgram.exe

三、注意事项

  1. 路径和文件名

    • 确保输入的路径和文件名是正确的,否则程序将无法启动。
  2. 权限

    • 在修改 HKEY_LOCAL_MACHINE 时,通常需要管理员权限。确保你有合适的权限来进行这些操作。
  3. 安全性

    • 不要随便添加不明来源的程序到开机自启动列表,避免恶意软件在系统启动时运行。
  4. 性能

    • 太多的开机自启动程序可能会延长系统启动时间。尽量只添加必要的程序。

四、其他方法

        除了使用注册表,还可以通过以下方法配置开机自启动程序:

任务计划程序

        使用Windows自带的任务计划程序,可以创建在登录时启动的任务。

        按下 Win + R,输入 taskschd.msc,按回车。

schtasks /create /tn "MyProgramStartup" /tr "C:\Path\To\YourProgram.exe" /sc onlogon /rl highest

         windows C++ 注册登录计划任务,用于在Windows中使用Task Scheduler COM接口创建一个在用户登录时启动的计划任务:

#include <iostream>
#include <comdef.h>
#include <taskschd.h>
#pragma comment(lib, "taskschd.lib")
#pragma comment(lib, "comsupp.lib")void CreateTaskSchedulerTask() {// 初始化COM库,以支持多线程HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);if (FAILED(hr)) {std::cerr << "CoInitializeEx failed: " << hr << std::endl;return;}// 设置COM安全级别hr = CoInitializeSecurity(NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_PKT_PRIVACY, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, 0, NULL);if (FAILED(hr)) {std::cerr << "CoInitializeSecurity failed: " << hr << std::endl;CoUninitialize();return;}// 创建Task Service实例ITaskService* pService = NULL;hr = CoCreateInstance(CLSID_TaskScheduler, NULL, CLSCTX_INPROC_SERVER, IID_ITaskService, (void**)&pService);if (FAILED(hr)) {std::cerr << "CoCreateInstance failed: " << hr << std::endl;CoUninitialize();return;}// 连接到Task Servicehr = pService->Connect(_variant_t(), _variant_t(), _variant_t(), _variant_t());if (FAILED(hr)) {std::cerr << "ITaskService::Connect failed: " << hr << std::endl;pService->Release();CoUninitialize();return;}// 获取根任务文件夹ITaskFolder* pRootFolder = NULL;hr = pService->GetFolder(_bstr_t(L"\\"), &pRootFolder);if (FAILED(hr)) {std::cerr << "Cannot get Root Folder pointer: " << hr << std::endl;pService->Release();CoUninitialize();return;}// 创建任务定义ITaskDefinition* pTask = NULL;hr = pService->NewTask(0, &pTask);pService->Release();  // 释放服务指针,因为它不再需要if (FAILED(hr)) {std::cerr << "Failed to create task definition: " << hr << std::endl;pRootFolder->Release();CoUninitialize();return;}// 获取任务的注册信息接口,用于设置任务的标识IRegistrationInfo* pRegInfo = NULL;hr = pTask->get_RegistrationInfo(&pRegInfo);if (FAILED(hr)) {std::cerr << "Cannot get identification pointer: " << hr << std::endl;pRootFolder->Release();pTask->Release();CoUninitialize();return;}pRegInfo->put_Author(L"Author Name");  // 设置任务的作者信息pRegInfo->Release();// 获取触发器集合ITriggerCollection* pTriggerCollection = NULL;hr = pTask->get_Triggers(&pTriggerCollection);if (FAILED(hr)) {std::cerr << "Cannot get trigger collection: " << hr << std::endl;pRootFolder->Release();pTask->Release();CoUninitialize();return;}// 创建登录触发器ITrigger* pTrigger = NULL;hr = pTriggerCollection->Create(TASK_TRIGGER_LOGON, &pTrigger);pTriggerCollection->Release();if (FAILED(hr)) {std::cerr << "Cannot create trigger: " << hr << std::endl;pRootFolder->Release();pTask->Release();CoUninitialize();return;}// 获取ILogonTrigger接口ILogonTrigger* pLogonTrigger = NULL;hr = pTrigger->QueryInterface(IID_ILogonTrigger, (void**)&pLogonTrigger);pTrigger->Release();if (FAILED(hr)) {std::cerr << "QueryInterface call failed for ILogonTrigger: " << hr << std::endl;pRootFolder->Release();pTask->Release();CoUninitialize();return;}pLogonTrigger->put_Id(_bstr_t(L"Trigger1"));  // 设置触发器IDpLogonTrigger->Release();// 获取操作集合IActionCollection* pActionCollection = NULL;hr = pTask->get_Actions(&pActionCollection);if (FAILED(hr)) {std::cerr << "Cannot get action collection: " << hr << std::endl;pRootFolder->Release();pTask->Release();CoUninitialize();return;}// 创建执行操作IAction* pAction = NULL;hr = pActionCollection->Create(TASK_ACTION_EXEC, &pAction);pActionCollection->Release();if (FAILED(hr)) {std::cerr << "Cannot create action: " << hr << std::endl;pRootFolder->Release();pTask->Release();CoUninitialize();return;}// 获取IExecAction接口IExecAction* pExecAction = NULL;hr = pAction->QueryInterface(IID_IExecAction, (void**)&pExecAction);pAction->Release();if (FAILED(hr)) {std::cerr << "QueryInterface call failed for IExecAction: " << hr << std::endl;pRootFolder->Release();pTask->Release();CoUninitialize();return;}// 设置要执行的程序路径pExecAction->put_Path(_bstr_t(L"C:\\Path\\To\\YourProgram.exe"));pExecAction->Release();// 注册任务IRegisteredTask* pRegisteredTask = NULL;hr = pRootFolder->RegisterTaskDefinition(_bstr_t(L"MyProgramStartup"),pTask,TASK_CREATE_OR_UPDATE,_variant_t(L""),_variant_t(L""),TASK_LOGON_INTERACTIVE_TOKEN,_variant_t(L""),&pRegisteredTask);if (FAILED(hr)) {std::cerr << "Error saving the Task : " << hr << std::endl;pRootFolder->Release();pTask->Release();CoUninitialize();return;}std::cout << "Task successfully registered." << std::endl;pRootFolder->Release();pTask->Release();pRegisteredTask->Release();CoUninitialize();
}int main() {CreateTaskSchedulerTask();return 0;
}

XML配置计划任务:

启动文件夹

        将程序快捷方式放置在 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup 文件夹中。

将程序快捷方式放置在 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup 文件夹中,您可以确保该程序在每次启动 Windows 时自动运行。以下是详细的步骤:

1. 创建程序快捷方式

如果您已经有程序的快捷方式,请跳过此步骤。

  1. 找到您希望自动启动的程序的可执行文件(通常以 .exe 结尾)。
  2. 右键单击该文件并选择“创建快捷方式”。这将在同一文件夹中创建一个快捷方式文件。

2. 打开 Startup 文件夹

  1. Win + R 键以打开“运行”对话框。
  2. 输入 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup 并按 Enter 键。这将打开 Startup 文件夹。

3. 将快捷方式移动到 Startup 文件夹

  1. 找到您创建的程序快捷方式。
  2. 右键单击该快捷方式并选择“剪切”。
  3. 打开 Startup 文件夹后,在空白区域右键单击并选择“粘贴”。这样,快捷方式就会被移动到 Startup 文件夹中。

4. 验证程序是否自动启动

  1. 重启您的计算机。
  2. 在 Windows 启动后,确认您所放置在 Startup 文件夹中的程序是否自动运行。

注意事项

  • 确保您有管理员权限来执行这些操作,特别是访问和修改 C:\ProgramData 文件夹时。
  • 如果某些程序不适合自动启动或会导致系统性能问题,请谨慎添加到 Startup 文件夹中。

通过上述步骤,您可以轻松地将任何程序设置为开机自动启动。

 五、开机自启动程序配置示例代码

#include <windows.h>
#include <iostream>bool AddToStartup(const wchar_t* appName, const wchar_t* appPath, const wchar_t* appArgs) {HKEY hKey;LONG lResult;const wchar_t* runKeyPath = L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";// 创建包含程序路径和参数的完整命令行std::wstring command = L"\"";command += appPath;command += L"\" ";command += appArgs;// 打开注册表项lResult = RegOpenKeyEx(HKEY_CURRENT_USER, runKeyPath, 0, KEY_WRITE, &hKey);if (lResult != ERROR_SUCCESS) {std::wcerr << L"Failed to open registry key: " << lResult << std::endl;return false;}// 设置注册表值lResult = RegSetValueEx(hKey, appName, 0, REG_SZ, (const BYTE*)command.c_str(), (command.size() + 1) * sizeof(wchar_t));if (lResult != ERROR_SUCCESS) {std::wcerr << L"Failed to set registry value: " << lResult << std::endl;RegCloseKey(hKey);return false;}// 关闭注册表项RegCloseKey(hKey);return true;
}int main() {const wchar_t* appName = L"MyApp";const wchar_t* appPath = L"C:\\Path\\To\\YourApp.exe";const wchar_t* appArgs = L"--example-arg";if (AddToStartup(appName, appPath, appArgs)) {std::wcout << L"Successfully added to startup." << std::endl;} else {std::wcerr << L"Failed to add to startup." << std::endl;}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/94532.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/94532.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(11)用于无GPS导航的制图师SLAM(一)

文章目录 前言 1 安装 RPLidar 和 Pixhawk 2 检查 RPLidar 的串行端口 3 安装更多软件包 4 创建Catkin工作空间 5 安装 RPLidar 节点 6 安装 Google Cartographer 前言 本页展示了如何使用 RPLidarA2 激光雷达(RPLidarA2 lidar)设置 ROS 和 Google Cartographer SLAM&a…

车载诊断架构 --- 基于整车功能的正向诊断需求开发

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…

字帖生成器怎么用?电脑手机双端操作指南

字帖生成器是一款支持电脑端和手机端的免费练字工具&#xff0c;可一键生成PDF格式字帖并直接打印使用。本文基于官方公开版本&#xff0c;提供无广告、无营销的实测操作指南。 工具基础信息 软件名称&#xff1a;字帖生成器适用设备&#xff1a;Windows、安卓/鸿蒙核心功能&…

pycharm 远程连接服务器报错

配置远程链接的时候出现报错 Command finished with exit code 139 Execution was killed due to timeout Failed to execute command Rsync command ‘rsync’ was not found neither in local PATH nor as full executable path Starting introspection for Python… 放假前好…

局域网共享文件夹

准备工作&#xff1a; A电脑&#xff08;共享端&#xff09; B电脑&#xff08;本机&#xff09;在A电脑&#xff0c;选好要共享的目录&#xff0c;然后右键属性 > 高级共享 > 共享此文件夹 > 权限(全开)然后找到此电脑&#xff0c;右键&#xff0c;打开属性&#xff…

时序数据库全景指南:从场景选型到内核拆解

1. 什么是时序数据 时序数据&#xff08;Time-Series Data&#xff09; 是在时间上连续产生、且带有时间戳的观测值序列&#xff0c;典型特征&#xff1a;维度描述高并发写百万点/秒&#xff0c;追加为主写多读少90 % 查询是降采样或聚合时效性越新越热&#xff0c;旧数据价值递…

深入解析 Oracle 内存架构:驾驭 SGA 与 PGA 的性能艺术

引言&#xff1a;数据库的心脏与大脑如果说磁盘上的数据文件是 Oracle 数据库的“身体”&#xff0c;是永久存储的基石&#xff0c;那么内存结构就是其“心脏与大脑”。它负责所有计算活动的发生&#xff0c;决定了数据泵送的速度与效率。一个配置得当、运行顺畅的内存体系&…

竣工验收备案识别技术:通过AI和OCR实现智能化文档处理,提升效率与准确性,推动建筑行业数字化转型。

竣工验收备案是建设工程项目投入使用的最终法定程序&#xff0c;是确保工程符合规划、质量、消防、环保等各项要求的核心关口。传统的备案流程依赖大量纸质文档和人工审核&#xff0c;效率低下且易出错。随着人工智能与大数据技术的崛起&#xff0c;竣工验收备案识别技术应运而…

76 最小覆盖子串

76 最小覆盖子串 文章目录76 最小覆盖子串1 题目2 解答1 题目 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串&#xff0c;则返回空字符串 "" 。 注意&#xff1a; 对于 t 中重复字符&#xff0c;…

趣味学Rust基础篇(变量与可变性)

这篇文章将用通俗的比喻和清晰的逻辑&#xff0c;带你深入理解 Rust 变量背后的核心思想&#xff0c;让你不仅“会用”&#xff0c;更能“明白为什么”。 Rust 的“盒子哲学”&#xff1a;变量、可变性、常量与隐藏 想象一下&#xff0c;Rust 里的变量就像一个个盒子。你把值&a…

2025年- H100-Lc208--912.排序数组(快速选择排序)--Java版

1.题目2.思路 快速选择排序的平均时间复杂度是O&#xff08;nlogn&#xff09;&#xff0c;最坏时间复杂度是O&#xff08;n^2&#xff09;&#xff0c;最好的时间复杂度是O&#xff08;nlogn&#xff09;&#xff0c;空间复杂度是O&#xff08;nlogn&#xff09;。 排序算法中…

解决 pdf.mjs 因 MIME 类型错误导致的模块加载失败问题

Mozilla PDF.js V4 开始&#xff0c;它官方分发确实只提供了 ESM 模块&#xff08;.mjs&#xff09;&#xff0c;没有以前的 pdf.js、pdf.worker.js UMD 版本了。 这个问题本质上是 浏览器要求以 application/javascript MIME 类型加载 ES Module&#xff0c;而你引入的 pdf.mj…

STM32八大模式

前言&#xff1a;STM32存在八大模式&#xff0c;分别如下推挽输出&#xff0c;开漏输出&#xff0c;复用推挽输出&#xff0c;复用开漏输出浮空输入&#xff0c;上拉输入&#xff0c;下拉输入&#xff0c;模拟输入STM32标准IO结构图如下&#xff1a;其中如下电路为保护电路&…

OpenCV4.X库功能全解---个人笔记

文章目录前言1.Core核心功能1.1 基本数据类型和结构&#xff1a;1.2 数组操作&#xff1a;1.3 数学函数&#xff1a;1.4 随机数生成&#xff1a;1.5 线性代数运算&#xff1a;1.6 常用数据结构和算法&#xff1a;1.7 XML/YAML文件读写&#xff1a;1.8 错误处理&#xff1a;1.9时…

代码随想录刷题Day44

二叉搜索树的最近公共祖先 这道题&#xff0c;可以沿用二叉树的最近公共祖先的求法进行求解&#xff0c;也就是root判断-左右子树递归求LCA-根据左右子树的LCA结果返回值这一套。 但是&#xff0c;如果要用上搜索二叉树的有序性这个信息的话&#xff0c;就可以直接在递归时候确…

springmvc的数据校验和处理的一个例子

JSR-303是Java 的标准规范&#xff0c;而 Spring MVC 对其提供了完美的支持和集成 1.JSR-303 的身份 JSR-303 是 Java 标准 JSR&#xff1a;Java Specification Request&#xff08;Java 规范请求&#xff09; JSR-303&#xff1a;Bean Validation 1.0&#xff08;Bean 验证规范…

SlowFast使用指南(三)——自建数据集

写在前面 在前两个章节初步使用了SlowFast&#xff0c;使用的都是官方给出的数据集。 附上链接&#xff1a; SlowFast使用指南&#xff08;一&#xff09;——demo运行-CSDN博客 SlowFast使用指南&#xff08;二&#xff09;——训练ava数据集-CSDN博客 本文尝试了使用自己的数…

Day26 树的层序遍历 哈希表 排序算法 内核链表

day26 树的层序遍历 哈希表 排序算法 内核链表 实现树的层序遍历&#xff08;广度遍历&#xff09; 使用队列辅助实现二叉树的层序遍历。算法核心思想是&#xff1a;从根节点开始&#xff0c;依次将每一层的节点入队&#xff0c;出队时访问该节点&#xff0c;并将其左右子节点&…

【系统分析师】高分论文:论快速应用开发方法及应用

【摘要】 我在某县卫生健康委员会公共卫生信息中心工作&#xff0c;是信息中心的负责人。2021年5月&#xff0c;我中心受县痪病预防控制中心委托&#xff0c;为某种痪病疫苗3期临床项日开发受试对象拦截系统。我负责系统架构设计、需求分析以及后期的部分编码工作。通过与庆病预…

4056:【GESP2403八级】接竹竿

/*4056&#xff1a;【GESP2403八级】接竹竿flag 数组 存储每个元素出现的位置&#xff0c;nxt[i]j;存储每个位置 后面第一次出现 与a【i】相等的位置//其中 a【i]a[j] :记录i的下一个位置 &#xff0c;flag 存储每个值的位置下一次 具有下一次&#xff0c;相当于的链表了&…