查询windows系统下某程序是否已安装(注册表方式)---Qt

前言

以前几乎没怎么和windows系统交互过,比如打开某个程序或获取系统的某种信息。这次需求是:检测本系统是否安装了某个应用,若有,则将其打开;若没有,则下载,进行安装,然后再打开。所以检测系统下是否含有某个程序,在完全不了解windows api的情况下,成为了难点:在哪里找?找到后怎么获取安装位置?。。。

后来想到注册表里面应该有安装的信息吧,所以才有了这篇博客。

 

理论和代码

注册表,是存储系统和应用程序的设置信息。

打开注册表的方式很简单:打开运行--输入regedit--确定 ,这就打开了,可以打开随便看看。

已安装的程序,如果是32位的,路径为:

"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\"

如果是64位的,则要比32位的多一个路径

"HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\"

 根据路径打开后,注册表的界面大概是这样子的:

再仔细看,当前应用程序在注册表内的信息(下图),我们可以看到名称(DisplayName),安装位置(InstallLocation)等信息,找我们需要的读取就行了(注意,不是所有的应用程序在注册表的信息都这样,这个视不同应用而定)

 

知道流程了,那么代码也就不成问题了:QSetting获取注册表,对比名称(DisplayName)寻找是否安装,安装,则返回安装目录,否则,返回空。 代码如下(64系统下,已知是64位,就写了一个路径,可for循环,遍历两个)

QString FinancialManagementDialog::HasIntStall(QString softName)
{
    QString header = "HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\";

    QSettings reg(header,QSettings::NativeFormat);
    QStringList sum = reg.allKeys();
    for(int m  = 0 ; m < sum.size();++m){
        QString id = sum.at(m);
        QStringList strList=id.split("/");
        QSettings gt(header + strList[0],QSettings::NativeFormat);
        QString name = gt.value("DisplayName").toString();

        if(name.contains(softName))
        {
            QString tempStr=gt.value("InstallLocation").toString();
            QString filePath=tempStr.replace("\\","/")+"bin/"+m_strCurExecFileName;
            return filePath;
        }
    }

    return QString("");

}

 

结束语

windows下查询程序是否安装,介绍结束了,很简单。等有时间了,我再学习下windows api的方法,等待我的归来!!

好的,以下是使用C++ QT实现Windows系统下应用程序自启动的代码: ```cpp #include <QSettings> #include <QCoreApplication> #include <QDir> void setAutoStart(bool enable, const QString& appName, const QString& appPath) { QSettings settings("HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", QSettings::NativeFormat); if (enable) { QString filePath = QDir::toNativeSeparators(appPath); settings.setValue(appName, filePath); } else { settings.remove(appName); } } int main (int argc, char *argv[]) { QCoreApplication app(argc, argv); QString appName = "MyApp"; // 设置自启动的应用程序名称 QString appPath = QCoreApplication::applicationFilePath(); // 获取当前应用程序的路径 setAutoStart(true, appName, appPath); // 开启自启动 return app.exec(); } ``` 这段代码使用了Windows系统注册表中的`HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run`键值来实现应用程序的自启动。在`setAutoStart`函数中,我们传入了一个`enable`参数来表示是否开启自启动,一个`appName`参数来表示自启动的应用程序名称,以及一个`appPath`参数来表示当前应用程序的路径。在函数中,我们首先使用了`QSettings`类来打开注册表并获取到`HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run`键值的值,然后根据`enable`参数的值来设置或删除应用程序的自启动项。在`main`函数中,我们获取了当前应用程序的路径,并将其作为`appPath`参数传入`setAutoStart`函数中,从而实现了应用程序的自启动。 需要注意的是,为了保证应用程序可以正确地自启动,我们需要将编译后的可执行文件放置在Windows的启动文件夹中。在Windows 10系统下,启动文件夹的路径通常为`C:\Users\用户名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup`,其中`用户名`为当前用户的用户名。将编译后的可执行文件复制到该文件夹中后,再次启动计算机即可测试应用程序是否成功自启动。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值