windows注册表:开机自启动步伐配置

打印 上一主题 下一主题

主题 818|帖子 818|积分 2454

        
目录
一、注册表位置
系统范围的开机自启动步伐
当前用户的开机自启动步伐
二、配置步骤
三、留意事项
四、其他方法
使命计划步伐

启动文件夹
1. 创建步伐快捷方式
2. 打开 Startup 文件夹
3. 将快捷方式移动到 Startup 文件夹
4. 验证步伐是否自动启动
留意事项
 五、开机自启动步伐配置示例代码


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

系统范围的开机自启动步伐

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

当前用户的开机自启动步伐



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


二、配置步骤


  • 打开注册表编辑器

    • 按下 Win + R,输入 regedit,按回车。

  • 导航到目的路径

    • 根据需要选择 HKEY_LOCAL_MACHINE 或 HKEY_CURRENT_USER,然后导航到 Software\Microsoft\Windows\CurrentVersion\Run。

  • 添加新的字符串值

    • 右键点击右侧窗口,选择 新建 -> 字符串值。
    • 给这个新建的值命名,可以是你要添加的步伐的名字。

  • 设置值的数据

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


三、留意事项


  • 路径和文件名

    • 确保输入的路径和文件名是精确的,否则步伐将无法启动。

  • 权限

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

  • 安全性

    • 不要任意添加不明来源的步伐到开机自启动列表,制止恶意软件在系统启动时运行。

  • 性能

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

四、其他方法

        除了使用注册表,还可以通过以下方法配置开机自启动步伐:
使命计划步伐

        使用Windows自带的使命计划步伐,可以创建在登录时启动的使命。
        按下 Win + R,输入 taskschd.msc,按回车。

  1. schtasks /create /tn "MyProgramStartup" /tr "C:\Path\To\YourProgram.exe" /sc onlogon /rl highest
复制代码
         windows C++ 注册登录计划使命,用于在Windows中使用Task Scheduler COM接口创建一个在用户登录时启动的计划使命:
  1. #include <iostream>
  2. #include <comdef.h>
  3. #include <taskschd.h>
  4. #pragma comment(lib, "taskschd.lib")
  5. #pragma comment(lib, "comsupp.lib")
  6. void CreateTaskSchedulerTask() {
  7.     // 初始化COM库,以支持多线程
  8.     HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
  9.     if (FAILED(hr)) {
  10.         std::cerr << "CoInitializeEx failed: " << hr << std::endl;
  11.         return;
  12.     }
  13.     // 设置COM安全级别
  14.     hr = CoInitializeSecurity(
  15.         NULL,
  16.         -1,
  17.         NULL,
  18.         NULL,
  19.         RPC_C_AUTHN_LEVEL_PKT_PRIVACY,
  20.         RPC_C_IMP_LEVEL_IMPERSONATE,
  21.         NULL,
  22.         0,
  23.         NULL);
  24.     if (FAILED(hr)) {
  25.         std::cerr << "CoInitializeSecurity failed: " << hr << std::endl;
  26.         CoUninitialize();
  27.         return;
  28.     }
  29.     // 创建Task Service实例
  30.     ITaskService* pService = NULL;
  31.     hr = CoCreateInstance(CLSID_TaskScheduler, NULL, CLSCTX_INPROC_SERVER, IID_ITaskService, (void**)&pService);
  32.     if (FAILED(hr)) {
  33.         std::cerr << "CoCreateInstance failed: " << hr << std::endl;
  34.         CoUninitialize();
  35.         return;
  36.     }
  37.     // 连接到Task Service
  38.     hr = pService->Connect(_variant_t(), _variant_t(), _variant_t(), _variant_t());
  39.     if (FAILED(hr)) {
  40.         std::cerr << "ITaskService::Connect failed: " << hr << std::endl;
  41.         pService->Release();
  42.         CoUninitialize();
  43.         return;
  44.     }
  45.     // 获取根任务文件夹
  46.     ITaskFolder* pRootFolder = NULL;
  47.     hr = pService->GetFolder(_bstr_t(L"\"), &pRootFolder);
  48.     if (FAILED(hr)) {
  49.         std::cerr << "Cannot get Root Folder pointer: " << hr << std::endl;
  50.         pService->Release();
  51.         CoUninitialize();
  52.         return;
  53.     }
  54.     // 创建任务定义
  55.     ITaskDefinition* pTask = NULL;
  56.     hr = pService->NewTask(0, &pTask);
  57.     pService->Release();  // 释放服务指针,因为它不再需要
  58.     if (FAILED(hr)) {
  59.         std::cerr << "Failed to create task definition: " << hr << std::endl;
  60.         pRootFolder->Release();
  61.         CoUninitialize();
  62.         return;
  63.     }
  64.     // 获取任务的注册信息接口,用于设置任务的标识
  65.     IRegistrationInfo* pRegInfo = NULL;
  66.     hr = pTask->get_RegistrationInfo(&pRegInfo);
  67.     if (FAILED(hr)) {
  68.         std::cerr << "Cannot get identification pointer: " << hr << std::endl;
  69.         pRootFolder->Release();
  70.         pTask->Release();
  71.         CoUninitialize();
  72.         return;
  73.     }
  74.     pRegInfo->put_Author(L"Author Name");  // 设置任务的作者信息
  75.     pRegInfo->Release();
  76.     // 获取触发器集合
  77.     ITriggerCollection* pTriggerCollection = NULL;
  78.     hr = pTask->get_Triggers(&pTriggerCollection);
  79.     if (FAILED(hr)) {
  80.         std::cerr << "Cannot get trigger collection: " << hr << std::endl;
  81.         pRootFolder->Release();
  82.         pTask->Release();
  83.         CoUninitialize();
  84.         return;
  85.     }
  86.     // 创建登录触发器
  87.     ITrigger* pTrigger = NULL;
  88.     hr = pTriggerCollection->Create(TASK_TRIGGER_LOGON, &pTrigger);
  89.     pTriggerCollection->Release();
  90.     if (FAILED(hr)) {
  91.         std::cerr << "Cannot create trigger: " << hr << std::endl;
  92.         pRootFolder->Release();
  93.         pTask->Release();
  94.         CoUninitialize();
  95.         return;
  96.     }
  97.     // 获取ILogonTrigger接口
  98.     ILogonTrigger* pLogonTrigger = NULL;
  99.     hr = pTrigger->QueryInterface(IID_ILogonTrigger, (void**)&pLogonTrigger);
  100.     pTrigger->Release();
  101.     if (FAILED(hr)) {
  102.         std::cerr << "QueryInterface call failed for ILogonTrigger: " << hr << std::endl;
  103.         pRootFolder->Release();
  104.         pTask->Release();
  105.         CoUninitialize();
  106.         return;
  107.     }
  108.     pLogonTrigger->put_Id(_bstr_t(L"Trigger1"));  // 设置触发器ID
  109.     pLogonTrigger->Release();
  110.     // 获取操作集合
  111.     IActionCollection* pActionCollection = NULL;
  112.     hr = pTask->get_Actions(&pActionCollection);
  113.     if (FAILED(hr)) {
  114.         std::cerr << "Cannot get action collection: " << hr << std::endl;
  115.         pRootFolder->Release();
  116.         pTask->Release();
  117.         CoUninitialize();
  118.         return;
  119.     }
  120.     // 创建执行操作
  121.     IAction* pAction = NULL;
  122.     hr = pActionCollection->Create(TASK_ACTION_EXEC, &pAction);
  123.     pActionCollection->Release();
  124.     if (FAILED(hr)) {
  125.         std::cerr << "Cannot create action: " << hr << std::endl;
  126.         pRootFolder->Release();
  127.         pTask->Release();
  128.         CoUninitialize();
  129.         return;
  130.     }
  131.     // 获取IExecAction接口
  132.     IExecAction* pExecAction = NULL;
  133.     hr = pAction->QueryInterface(IID_IExecAction, (void**)&pExecAction);
  134.     pAction->Release();
  135.     if (FAILED(hr)) {
  136.         std::cerr << "QueryInterface call failed for IExecAction: " << hr << std::endl;
  137.         pRootFolder->Release();
  138.         pTask->Release();
  139.         CoUninitialize();
  140.         return;
  141.     }
  142.     // 设置要执行的程序路径
  143.     pExecAction->put_Path(_bstr_t(L"C:\\Path\\To\\YourProgram.exe"));
  144.     pExecAction->Release();
  145.     // 注册任务
  146.     IRegisteredTask* pRegisteredTask = NULL;
  147.     hr = pRootFolder->RegisterTaskDefinition(
  148.         _bstr_t(L"MyProgramStartup"),
  149.         pTask,
  150.         TASK_CREATE_OR_UPDATE,
  151.         _variant_t(L""),
  152.         _variant_t(L""),
  153.         TASK_LOGON_INTERACTIVE_TOKEN,
  154.         _variant_t(L""),
  155.         &pRegisteredTask);
  156.     if (FAILED(hr)) {
  157.         std::cerr << "Error saving the Task : " << hr << std::endl;
  158.         pRootFolder->Release();
  159.         pTask->Release();
  160.         CoUninitialize();
  161.         return;
  162.     }
  163.     std::cout << "Task successfully registered." << std::endl;
  164.     pRootFolder->Release();
  165.     pTask->Release();
  166.     pRegisteredTask->Release();
  167.     CoUninitialize();
  168. }
  169. int main() {
  170.     CreateTaskSchedulerTask();
  171.     return 0;
  172. }
复制代码


XML配置计划使命:

启动文件夹

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

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

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


  • 按 Win + R 键以打开“运行”对话框。
  • 输入 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup 并按 Enter 键。这将打开 Startup 文件夹。
3. 将快捷方式移动到 Startup 文件夹


  • 找到您创建的步伐快捷方式。
  • 右键单击该快捷方式并选择“剪切”。
  • 打开 Startup 文件夹后,在空白区域右键单击并选择“粘贴”。如许,快捷方式就会被移动到 Startup 文件夹中。
4. 验证步伐是否自动启动


  • 重启您的盘算机。
  • 在 Windows 启动后,确认您所放置在 Startup 文件夹中的步伐是否自动运行。
留意事项



  • 确保您有管理员权限来执行这些操作,特别是访问和修改 C:\ProgramData 文件夹时。
  • 如果某些步伐不适合自动启动或会导致系统性能问题,请谨慎添加到 Startup 文件夹中。
通过上述步骤,您可以轻松地将任何步伐设置为开机自动启动。
 五、开机自启动步伐配置示例代码

  1. #include <windows.h>
  2. #include <iostream>
  3. bool AddToStartup(const wchar_t* appName, const wchar_t* appPath, const wchar_t* appArgs) {
  4.     HKEY hKey;
  5.     LONG lResult;
  6.     const wchar_t* runKeyPath = L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";
  7.     // 创建包含程序路径和参数的完整命令行
  8.     std::wstring command = L""";
  9.     command += appPath;
  10.     command += L"" ";
  11.     command += appArgs;
  12.     // 打开注册表项
  13.     lResult = RegOpenKeyEx(HKEY_CURRENT_USER, runKeyPath, 0, KEY_WRITE, &hKey);
  14.     if (lResult != ERROR_SUCCESS) {
  15.         std::wcerr << L"Failed to open registry key: " << lResult << std::endl;
  16.         return false;
  17.     }
  18.     // 设置注册表值
  19.     lResult = RegSetValueEx(hKey, appName, 0, REG_SZ, (const BYTE*)command.c_str(), (command.size() + 1) * sizeof(wchar_t));
  20.     if (lResult != ERROR_SUCCESS) {
  21.         std::wcerr << L"Failed to set registry value: " << lResult << std::endl;
  22.         RegCloseKey(hKey);
  23.         return false;
  24.     }
  25.     // 关闭注册表项
  26.     RegCloseKey(hKey);
  27.     return true;
  28. }
  29. int main() {
  30.     const wchar_t* appName = L"MyApp";
  31.     const wchar_t* appPath = L"C:\\Path\\To\\YourApp.exe";
  32.     const wchar_t* appArgs = L"--example-arg";
  33.     if (AddToStartup(appName, appPath, appArgs)) {
  34.         std::wcout << L"Successfully added to startup." << std::endl;
  35.     } else {
  36.         std::wcerr << L"Failed to add to startup." << std::endl;
  37.     }
  38.     return 0;
  39. }
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

风雨同行

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表