21xrx.com
2024-12-23 07:30:07 Monday
登录
文章检索 我的文章 写文章
C++编写开机自启动代码
2023-06-27 20:59:09 深夜i     --     --
C++ 开机自启动 编写 代码

在一些场合下,我们需要在计算机系统启动时自动执行一些程序或者脚本,这就需要用到开机自启动。在Windows系统中,开机自启动可以通过注册表或创建快捷方式来实现。而在Linux系统中,可以通过编写启动脚本来实现。本文将介绍如何使用C++编写开机自启动代码。

在Windows中,开机自启动的注册表路径为:


HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

我们只需要在其中选择一个,然后在其中创建一个新的字符串值,将程序的路径写入即可。下面是一个示例程序:


#include <windows.h>

#include <iostream>

using namespace std;

int main()

{

  HKEY hKey;

  LPCWSTR lpSubKey = TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run");

  LPCWSTR lpValueName = TEXT("MyApplication");

  LPCWSTR lpValueData = TEXT("C:\\MyApplication\\MyApplication.exe");

  DWORD dwDisp, dwType = REG_SZ, dwSize = (wcslen(lpValueData) + 1) * 2;

  if (RegCreateKeyEx(HKEY_CURRENT_USER, lpSubKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey, &dwDisp) == ERROR_SUCCESS)

  {

    if (RegSetValueEx(hKey, lpValueName, 0, dwType, (LPBYTE)lpValueData, dwSize) == ERROR_SUCCESS)

    

      wcout << "Add to startup success!" << endl;

    

    RegCloseKey(hKey);

  }

  return 0;

}

以上代码将程序的路径写入了当前用户的开机启动项中。

在Linux中,开机自启动的启动脚本保存在`/etc/init.d/`目录下。我们可以在此目录下创建一个新的脚本,然后将程序的路径写入即可。下面是一个示例程序:


#include <fstream>

#include <string>

#include <iostream>

using namespace std;

int main()

{

  string script_path = "/etc/init.d/MyApplication";

  string app_path = "/usr/bin/MyApplication";

  ofstream out_file(script_path);

  if (out_file.is_open())

  {

    out_file << "#!/bin/sh\n" << endl;

    out_file << "### BEGIN INIT INFO\n" << endl;

    out_file << "# Provides:     MyApplication\n" << endl;

    out_file << "# Required-Start:\n" << endl;

    out_file << "# Required-Stop:\n" << endl;

    out_file << "# Default-Start:   2\n" << endl;

    out_file << "# Default-Stop:\n" << endl;

    out_file << "### END INIT INFO\n" << endl;

    out_file << "case \"$1\" in\n" << endl;

    out_file << "start)\n";

    out_file << app_path << " &\n";

    out_file << ";;\n";

    out_file << "stop)\n";

    out_file << "killall " << app_path << "\n";

    out_file << ";;\n";

    out_file << "restart)\n";

    out_file << "killall " << app_path << "\n";

    out_file << app_path << " &\n";

    out_file << ";;\n";

    out_file << "*)\n";

    out_file << "echo \"Usage: $0 {start|stop|restart}\" >&2\n";

    out_file << "exit 1\n";

    out_file << ";;\n";

    out_file << "esac\n";

    out_file.close();

    system(("chmod a+x " + script_path).c_str());

    cout << "Add to startup success!" << endl;

  }

  else

  

    cout << "Failed to create startup script!" << endl;

  

  return 0;

}

以上代码将程序的路径写入了启动脚本中,然后设置了启动脚本的执行权限,使其可以在系统启动时自动执行。

以上是使用C++编写开机自启动代码的方法,可以根据系统的不同选择不同的方式。开机自启动可以方便地在系统启动时执行一些必要的程序或者脚本,提高系统的使用效率。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复