Qt在Win,Mac和Linux的开机自启设置

Windows

Windows 使用注册表来管理开机自启的应用程序。

cpp 复制代码
void runWithSystem(const QString& name, const QString& path, bool autoRun) {
	QSetting reg("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", QSetting::NativeFormat);
	reg.setValue(name, autoRun ? path : "");
}

Linux

Linux 使用 ~/.config/autostart/*.desktop 来管理开机自启的应用程序。

cpp 复制代码
void runWithSystem(const QString& name, const QString& path, bool autoRun) {
	QString desktopFilePath = QStandarPaths::writableLocation(QStandardPaths::HomeLocation) + "/.config/autostart" + name + ".desktop";
	if (autoRun) {
		QFile file(desktopFilePath);
		if (file.open(QIODevice::WriteOnly | QIODevice::Text)) {
			QTextStream out(&file);
			out << "[Desktop Entry]\n"
				<< "Type=Application\n"
				<< "Name=" << name << "\n"
				<< "Exec=" << path << "\n"
				<< "X-GNOME-Autostart-enabled=true";
			file.close();
		}
	}
	else {
		QFile::remove(desktopFilePath);
	}
}

Macos

Macos 采用 launchd 来管理启动项。

cpp 复制代码
void runWithSystem(const QString& name, const QString& path, bool autoRun) {
	QString plistPath = QStandardPaths::writableLocation(QStandards::HomeLocation) + "/Library/LaunchAgents/" + name + ".plist";
	if (autoRun) {
		QFile file(plistPath);
		if (file.open(QIODevice::WriteOnly | QIODevice::Text)) {
			QTextStream out(&file);
			out << "<?xml version\"1.0\" encoding=\"UTF-8\"?>\n"
					"!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\"\n"
					"	\"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n"
					"<plist version=\"1.0\">\n"
					"<dict>\n"
					"	<key>Label</key>\n"
					"	<string>" << name << "</string>\n"
					"	<key>ProgramArguments</key>\n"
					"	<array>\n"
					"		<string>" << path << "</string>\n"
					"	</array>\n"
					"	<key>RunAtLoad</key>\n"
					"	<true/>\n"
					"</dict>\n"
					"</plist>";
			file.close();
		}
	}
	else {
		QFile::remove(plistPatch);
	}
}
相关推荐
牛奶咖啡131 分钟前
Linux中搭建Samba服务并实现共享目录的配置及其不同策略授权访问操作实践教程
linux·samba服务的安装部署·samba共享目录和权限的配置·特殊场景共享目录授权·smb的匿名用户访问共享目录·smb的指定用户访问共享目录·强制清除smb缓存
Menahem1 分钟前
CentOS Stream 9 添加多个副ip
linux·tcp/ip·centos
风乍起吹皱一池春水3 分钟前
Linux 文件及用户的一些日常命令
linux·服务器
咖丨喱15 分钟前
【Miracast 协议详解】
linux
列逍15 分钟前
Linux文件(一)
linux·文件操作·write·read·重定向·open·文件描述符
私人珍藏库21 分钟前
[Mac] Mac风扇控制软件 iFan V1.1.1
macos
Ghost Face...25 分钟前
深入解析dd命令:缓存与磁盘速度之谜
linux·缓存
繁星蓝雨28 分钟前
Qt优雅的组织项目结构一(使用pri进行模块化配置)——————附带详细示例代码
开发语言·qt·pri
dishugj31 分钟前
【Linux】CENTOS 7服务器chronyd同步本地时间服务器时间设置详解
linux·运维·服务器
*老工具人了*34 分钟前
Linux I/O写数据全链路拆解
linux·运维