parallels desktop 启动过失败_Qt分别实现Windows和Linux下开机自启动的方法

f16b0ad67e0d62df082d63c4d8eab69b.png

前言

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

Windows

31aada788e8bd163233c40b1ecc470c5.png

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

打开开机自启动:

QString appName = QApplication::applicationName();//程序名称QString appPath = QApplication::applicationFilePath();//程序路径appPath = appPath.replace("/","");QSettings *reg = new QSettings("HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun", 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_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun", QSettings::NativeFormat); QString val = reg->value(appName).toString();//如果此键不存在,则返回的是空字符串if(val != ""){    reg->remove(appName);}reg->deleteLater();

Linux

f7e55cf3553ab7ab3380b1a63010357f.png

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脚本打开就能看到。

  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]") + "";    stream << QString("Name=MyAppName") + "";    stream << QString("Exec=") + qApp->applicationDirPath() + "/MyAppName";    stream << QString("Type=Application") + "";    stream << QString("Comment=MyApp Desription") + "";    file.close();}else    失败处理...    

关闭开机自启动:

if(QFile::remove("/etc/profile.d/MyAppName.desktop"))    成功消息...else    失败处理...
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值