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=MyAppNameExec=home/test/MyAppNameType=ApplicationComment=MyApp Description
.desktop文件有很多的属性可以设置,但是我们简单一点的话其实写几行就完全满足需求了,还有很多其电脑 他的参数,比如启动延时、图标等,大家如果想要了解其他的参数可以在/etc/xdg/autostart/文件中,找一个已有的.desktop脚本打开就能看到。
第一行是标准写法,这里不做解释第二行打开我们程序的名称第三行就是要执行的命令,这里我们想要开机启动自己的程序,就写上程序的路径第四行是类型,这里我们要启动一个程序就对应Application第五行是描述,可以随便写,也可以省去这一行知道脚本怎么写了以后,接下来我们想要在程序中实现开机自启动就比较容易了,就直接在/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 失败处理...
电脑