4#include "RabbitCommonRegister.h"
5#include "RabbitCommonDir.h"
7#include "RabbitCommonTools.h"
10#include <QCoreApplication>
12#include <QStandardPaths>
16static Q_LOGGING_CATEGORY(log,
"RabbitCommon.Register")
18const QString gKeyCurrentUserRun = "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run";
19const QString gKeyCurrentUserRunOnce = "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\RunOnce";
20const QString gKeyCurrentUserRunServices = "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\RunServices";
21const QString gKeyCurrentUserRunServicesOnce = "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\RunServicesOnce";
23const QString gKeyRun = "HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Run";
24const QString gKeyRunOnce = "HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\RunOnce";
25const QString gKeyRunServices = "HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\RunServices";
26const QString gKeyRunServicesOnce = "HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\RunServicesOnce";
32CRegister::~CRegister() {}
34int CRegister::InstallStartRunCurrentUser(QString szName, QString szPath)
37 return InstallStartRun(gKeyCurrentUserRun, szName, szPath);
38#elif defined(Q_OS_ANDROID)
42#elif defined(Q_OS_UNIX)
49 if(QFile::exists(szLink))
50 if(CTools::RemoveStartRun(szName,
false))
52 qCCritical(log) <<
"RemoveStartRun" << szName <<
"fail";
60 qCCritical(log) <<
"The desktop file is not exist." << appPath;
63 bool ret = f.link(szLink);
66 qCritical(log) <<
"f.link fail[" << f.error() <<
"]:" << f.errorString();
67 if(QFileDevice::RenameError == f.error())
return 0;
69 QString szCmd =
"ln -s " + appPath +
" " + szLink;
71 qCritical(log) <<
"execute" << szCmd <<
"fail";
76int CRegister::RemoveStartRunCurrentUser(QString szName)
79 return RemoveStartRun(gKeyCurrentUserRun, szName);
80#elif defined(Q_OS_ANDROID)
83#elif defined(Q_OS_UNIX)
85 if(!QFile::exists(szLink))
return 0;
88 if(d.remove(szLink))
return 0;
90 QString szCmd =
"rm " + szLink;
92 qCritical(log) <<
"execute" << szCmd <<
"fail";
97bool CRegister::IsStartRunCurrentUser(QString szName)
100 return IsStartRun(gKeyCurrentUserRun, szName);
101#elif defined(Q_OS_ANDROID)
104#elif defined(Q_OS_UNIX)
106 if(QFile::exists(szLink))
112int CRegister::InstallStartRunOnceCurrentUser(QString szName, QString szPath)
114 return InstallStartRun(gKeyCurrentUserRunOnce, szName, szPath);
117int CRegister::RemoveStartRunOnceCurrentUser(QString szName)
119 return RemoveStartRun(gKeyCurrentUserRunOnce, szName);
122bool CRegister::IsStartRunOnceCurrentUser(QString szName)
124 return IsStartRun(gKeyCurrentUserRunOnce, szName);
127int CRegister::InstallStartRunServicesCurrentUser(QString szName, QString szPath)
129 return InstallStartRun(gKeyCurrentUserRunServices, szName, szPath);
132int CRegister::RemoveStartRunServicesCurrentUser(QString szName)
134 return RemoveStartRun(gKeyCurrentUserRunServices, szName);
137bool CRegister::IsStartRunServicesCurrentUser(QString szName)
139 return IsStartRun(gKeyCurrentUserRunServices, szName);
142int CRegister::InstallStartRunServicesOnceCurrentUser(QString szName, QString szPath)
144 return InstallStartRun(gKeyCurrentUserRunServicesOnce, szName, szPath);
147int CRegister::RemoveStartRunServicesOnceCurrentUser(QString szName)
149 return RemoveStartRun(gKeyCurrentUserRunServicesOnce, szName);
152bool CRegister::IsStartRunServicesOnceCurrentUser(QString szName)
154 return IsStartRun(gKeyCurrentUserRunServicesOnce, szName);
157int CRegister::InstallStartRun(QString szName, QString szPath)
159#if defined (Q_OS_WIN)
160 return InstallStartRun(gKeyRun, szName, szPath);
161#elif defined(Q_OS_ANDROID)
165#elif defined(Q_OS_UNIX)
172 if(QFile::exists(szLink))
173 if(CTools::RemoveStartRun(szName,
true))
175 qCCritical(log) <<
"RemoveStartRun" << szName <<
"fail";
181 bool ret = f.link(szLink);
184 QString szCmd =
"ln -s " + appPath +
" " + szLink;
186 qCritical(log) <<
"CTools::InstallStartRun: file link"
187 << f.fileName() <<
" to " << szLink << f.error();
194int CRegister::RemoveStartRun(
const QString &szName)
196#if defined (Q_OS_WIN)
197 return RemoveStartRun(gKeyRun, szName);
198#elif defined(Q_OS_ANDROID)
201#elif defined(Q_OS_UNIX)
203 if(!QFile::exists(szLink))
return 0;
206 if(d.remove(szLink))
return 0;
208 QString szCmd =
"rm " + szLink;
210 qCritical(log) <<
"execute" << szCmd <<
"fail";
215bool CRegister::IsStartRun(
const QString &szName)
217#if defined (Q_OS_WIN)
218 return IsStartRun(gKeyRun, szName);
219#elif defined(Q_OS_ANDROID)
222#elif defined(Q_OS_UNIX)
224 if(QFile::exists(szLink))
230int CRegister::InstallStartRunOnce(QString szName, QString szPath)
232 return InstallStartRun(gKeyRunOnce, szName, szPath);
235int CRegister::RemoveStartRunOnce(QString szName)
237 return RemoveStartRun(gKeyRunOnce, szName);
240bool CRegister::IsStartRunOnce(QString szName)
242 return IsStartRun(gKeyRunOnce, szName);
245int CRegister::InstallStartRunServices(QString szName, QString szPath)
247 return InstallStartRun(gKeyRunServices, szName, szPath);
250int CRegister::RemoveStartRunServices(QString szName)
252 return RemoveStartRun(gKeyRunServices, szName);
255bool CRegister::IsStartRunServices(QString szName)
257 return IsStartRun(gKeyRunServices, szName);
260int CRegister::InstallStartRunServicesOnce(QString szName, QString szPath)
262 return InstallStartRun(gKeyRunServicesOnce, szName, szPath);
265int CRegister::RemoveStartRunServicesOnce(QString szName)
267 return RemoveStartRun(gKeyRunServicesOnce, szName);
270bool CRegister::IsStartRunServicesOnce(QString szName)
272 return IsStartRun(gKeyRunServicesOnce, szName);
275int CRegister::InstallStartRun(
const QString &szKey,
const QString &szName,
const QString &szPath)
281 QString appName = QCoreApplication::applicationName();
282 QString appPath = QCoreApplication::applicationFilePath();
283 if(!szName.isEmpty())
285 if(!szPath.isEmpty())
287 appPath = appPath.replace(
"/",
"\\");
288 return SetRegister(szKey, appName, appPath);
291int CRegister::RemoveStartRun(
const QString &szKey,
const QString &szName)
295 QString appName = QCoreApplication::applicationName();
296 if(!szName.isEmpty())
298 return RemoveRegister(szKey, appName);
301bool CRegister::IsStartRun(
const QString &szKey,
const QString &szName)
305 QString appName = QCoreApplication::applicationName();
307 if(!szName.isEmpty())
309 return IsRegister(szKey, appName);
312int CRegister::SetRegister(
const QString ®,
const QString &name,
const QString &path)
314 QSettings r(reg, QSettings::NativeFormat);
315 QString val = r.value(name).toString();
317 r.setValue(name, path);
321int CRegister::RemoveRegister(
const QString ®,
const QString &name)
323 QSettings r(reg, QSettings::NativeFormat);
324 QString val = r.value(name).toString();
330bool CRegister::IsRegister(
const QString ®,
const QString &name)
332 QSettings r(reg, QSettings::NativeFormat);
333 QString val = r.value(name).toString();
334 return !val.isEmpty();
347 const QString &szName)
349 QString appName =
"org.Rabbit." + qApp->applicationName() +
".desktop";
350 if(!szName.isEmpty())
353 QString appPath = CDir::Instance()->GetDirApplicationInstallRoot()
354 +
"/share/applications";
355 if(!szPath.isEmpty())
358 return appPath + QDir::separator() + appName;
371 =
"org.Rabbit." + QCoreApplication::applicationName() +
".desktop";
372 if(!szName.isEmpty()) appName = szName;
378 szLink = QStandardPaths::writableLocation(QStandardPaths::HomeLocation)
381 szLink +=
"/autostart";
390 qWarning(log) <<
"Create directory" << szLink;
393 szLink +=
"/" + appName;
static QString GetDesktopFileLink(const QString &szName=QString(), bool bAllUser=false)
GetDesktopFileLink.
static QString GetDesktopFileName(const QString &szPath=QString(), const QString &szName=QString())
Generate the name of desktop file.