QRunInfo是从Qt-Installer-Framework中提取的一些系统验证和运行信息获取的一些Qt封装。我只是为部分接口整理和组织下代码。代码基于LGPL2.1和LGPL3.0协议。
QRunInfo 地址:https://github.com/dushibaiyu/QRunInfo
其中涉及Qt的core模块,gui和widget模块(主要是AdminAuthorization)有用QWidget。
此文主要介绍下里面的一些封装好的一些API:
- AdminAuthorization类:
此类是为了验证程序的运行权限,和提权运行。提供了两个静态方法:
static bool hasAdminRights();//判断当前运行的程序有没有管理员权限。 static bool execute(QWidget *parent, const QString &programs, const QStringList &arguments);//以管理员身份启动新的程序: 其中: QWidget *parent//提示对话框的父级窗体。Win下没用。 const QString &programs //要启动的程序的命令 const QStringList &arguments//程序启动参数
- KDLockFile 类:
此类是锁定和解锁文件操作的封装:Qt有QLockFile类的,更好用。
KDLockFile 在KDRunOnceChecker 中有用。
explicit KDLockFile(const QString &name);//构造函数,const QString &name 为要锁定的文件path ~KDLockFile();//析构函数,如果文件锁定,析构时会自动解锁。 QString errorString() const;//返回错误信息 bool lock();//锁定文件,成功返回true bool unlock();//解定文件,成功返回true
- KDRunOnceChecker类
此类是检查是否当前程序是第一次启动,也就是有没有其他市里在运行。和检查文件是否锁定。
enum Dependencies { //检查模式
ProcessList, //检查运行程序列表是否有其他实例
Lockfile, //检查文件是否被锁定
Both };//两者全部检查
explicit KDRunOnceChecker(const QString &filename = QString());//构造函数,const QString &filename 是你要检查的是否锁定的文件
bool isRunning(Dependencies depends);//检查函数,根据你检查的选项,返回检查结果。
- KDSelfRestarter类:
程序退出自动重启类。
KDSelfRestarter(int argc, char *argv[]);//构造函数,传入当前程序启动的参数。 ~KDSelfRestarter();//如果设置为自动重启,则此析构函数执行时,就会自动按照当前参数启动当前实例。 static bool restartOnQuit();//返回是否自动重启 static void setRestartOnQuit(bool restart);//设置是否自动重启。
- VolumeInfo类:
分区信息结构
static VolumeInfo fromPath(const QString &path);//路径获取路径所在的分区信息 QString mountPath() const;//挂载的path,win下为盘符,即C:/ QString fileSystemType() const;//文件系统类型,在win下可能无效, QString volumeDescriptor() const;//分区描述符,(好像是分区的ID一类的,非盘符) quint64 size() const;//分区大小,单位字节 quint64 availableSize() const;//可用空间,单位字节
- ProcessInfo结构体:
quint32 id; //进程号,即进程ID QString name;//进程名,在win下是进程的全部路径
- RunInfo类:
里面全是静态函数,类名只是一个简单的组合
static quint64 installedMemory(); //当前系统的内存大小 static QList mountedVolumes();//当前系统的分区信息 static QList runningProcesses();//正在运行的进程列表 static bool killProcess(const ProcessInfo &process, int msecs = 30000);//强制杀死一个进程,返回结果,注:linux和mac未实现 static bool pathIsOnLocalDevice(const QString &path);//检查路径是不是在本地磁盘上,注:linux和mac未实现