Windows
Windows
使用注册表来管理开机自启的应用程序。
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
来管理开机自启的应用程序。
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
来管理启动项。
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);
}
}