计算机系统应用教程网站

网站首页 > 技术文章 正文

Qt分别实现Windows和Linux下开机自启动的方法

btikc 2024-10-24 09:32:16 技术文章 5 ℃ 0 评论

前言

  • 本文介绍的开机自启动方法在Windows、Linux-x86、Linux-arm、Linux-mips等平台都测试运行正常
  • 首先无论是Windows还是Linux平台下想要在Qt程序中打开/关闭开机自启动,都要以管理员身份运行程序才行,Windows下就是右击程序,然后选择以管理员身份运行即可,Linux下就以sudo ./AppName命令启动程序

Windows

Windows下实现开机自启动的方式就是写入或删除注册表,用Qt实现的方法如下:

打开开机自启动:

QString appName = QApplication::applicationName();//程序名称
QString appPath = QApplication::applicationFilePath();//程序路径
appPath = appPath.replace("/","\\");
QSettings *reg = new QSettings("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", QSettings::NativeFormat);
 
QString val = reg->value(appName).toString();//如果此键不存在,则返回的是空字符串
if(val != appPath)
{
    reg->setValue(appName, appPath);
}
reg->deleteLater();

关闭开机自启动:

QString appName = QApplication::applicationName();//程序名称
QSettings *reg = new QSettings("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", QSettings::NativeFormat);
 
QString val = reg->value(appName).toString();//如果此键不存在,则返回的是空字符串
if(val != "")
{
    reg->remove(appName);
}
reg->deleteLater();

Linux

Linux下开机自启动有多种方法,但是本人感觉网上介绍的方法都比较繁琐,而且我也在项目中尝试了几个方法,不是达不到想要的效果就是会产生僵尸进程。本文介绍的方法是个人使用了几个Linux下开机自启动方法以后觉得最简单有效的方法,并且在项目中实际使用,效果很好。

实现原理:

Linux在开机进入桌面之后会执行/etc/xdg/autostart/文件中的脚本,这些脚本通常都是.desktop文件,.desktop相当于Windows下的桌面快捷方式但是又不全是,它还可以执行一些指定的命令,指定一些信息等。所以我们想要实现自己程序的开机自启动,就在该目录下生成一个启动自己程序的.desktop文件即可。

首先启动程序的脚本如下:

[Desktop Entry]
Name=MyAppName
Exec=home/test/MyAppName
Type=Application
Comment=MyApp Description

.desktop文件有很多的属性可以设置,但是我们简单一点的话其实写几行就完全满足需求了,还有很多其他的参数,比如启动延时、图标等,大家如果想要了解其他的参数可以在/etc/xdg/autostart/文件中,找一个已有的.desktop脚本打开就能看到。

  1. 第一行是标准写法,这里不做解释
  2. 第二行打开我们程序的名称
  3. 第三行就是要执行的命令,这里我们想要开机启动自己的程序,就写上程序的路径
  4. 第四行是类型,这里我们要启动一个程序就对应Application
  5. 第五行是描述,可以随便写,也可以省去这一行

知道脚本怎么写了以后,接下来我们想要在程序中实现开机自启动就比较容易了,就直接在/etc/xdg/autostart/目录下生成.desktop文件,并写入上述内容即可。要想关闭就直接删除该文件即可,注意程序一定要以管理员身份运行,否则权限不够,写文件和删除文件会失败。

打开开机自启动:

QFile file("/etc/xdg/autostart/MyAppName.desktop");
if(file.open(QIODevice::ReadWrite))
{
    QTextStream stream(&file);
    stream << QString("[Desktop Entry]") + "\n";
    stream << QString("Name=MyAppName") + "\n";
    stream << QString("Exec=") + qApp->applicationDirPath() + "/MyAppName\n";
    stream << QString("Type=Application") + "\n";
    stream << QString("Comment=MyApp Desription") + "\n";
    file.close();
}
else
    失败处理...    

关闭开机自启动:

if(QFile::remove("/etc/profile.d/MyAppName.desktop"))
    成功消息...
else
    失败处理...

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表