win10写注册表开机自动启动自己编写的Qt exe程序

效果图:

代码:

#include "dia_settings.h"
#include <QStandardPaths>
#include <QProcess>

dia_settings::dia_settings(QWidget *parent)
	: QDialog(parent)
{
	ui.setupUi(this);

	//查看注册表是否已经写入程序名称	
	QSettings *reg = new QSettings("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run", QSettings::NativeFormat);
	QString strValue = reg->value("AppLoader").toString();
	QString path = QDir::toNativeSeparators(QCoreApplication::applicationFilePath());
	
	bool flag = (strValue == path);
	ui.checkBox->setChecked(flag);
}

dia_settings::~dia_settings()
{
}

void dia_settings::ok()
{

}

//Qt实现开机自启
void dia_settings::appAutoRun(bool bAutoRun)
{
	m_bAutoRun = bAutoRun;
	QSettings settings("./AppConfig.ini", QSettings::IniFormat);
	settings.setValue("/AutoRun/autoRun", QString::number(m_bAutoRun));
	
	//建立一个对象写或删注册表的QSettings
	QSettings *reg = new QSettings("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run", QSettings::NativeFormat);
	QString strValue = reg->value("AppLoader").toString();//查看注册表是否已经写入程序名称	
	QString strAppPath = QDir::toNativeSeparators(QCoreApplication::applicationFilePath());

	bool flag = (strValue == strAppPath);
	if (bAutoRun&&!flag)
	{
		//写入注册表信息(名字和路径)
		reg->setValue("AppLoader", strAppPath);
	}
	else if (!m_bAutoRun&&flag)
	{
		//删除注册表信息
		reg->remove(tr("AppLoader"));
	}
	delete reg;
}

 

但是注册表里面的启动项,工作目录继承了父进程的工作目录,也就是system32目录,结果直接通过".\\xxx.exe"的方式对可执行文件同一目录下程序的调用就会因找不到文件而失败。

检查了一下代码,bool QDir::cd ( const QString & dirName ) ,把原来的cd操作想办法替换,然后就OK了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值