• Qt在windows与Mac OS中获取执行程序版本号


    1 windows中获取执行文件exe的版本号
     

    QString GetFileVertion(QString aFullName)

    {

             QString vRetVersion;

     

             string vFullName = QStringToString(aFullName);

             char vVersion[256] = {0};

     

             DWORD vHandle = 0;

             DWORD vInfoSize = 0;

             vInfoSize = ::GetFileVersionInfoSize(vFullName.c_str(), &vHandle);

             if(vInfoSize <= 0)

             {      

                       return false;

             }

     

             char *pData = new char[vInfoSize + 1];

             memset(pData, 0, vInfoSize + 1);

             if(!::GetFileVersionInfo(vFullName.c_str(), NULL, vInfoSize, pData))   

             {  

                       if(pData)

                       {

                                delete pData;

                       }

                       return   FALSE;  

             }  

     

             string vTempStr = "\";

             VS_FIXEDFILEINFO *pFileInfo;  

             unsigned int vUInfoSize = 0; 

             if(!::VerQueryValue(pData, vTempStr.c_str(), (void**)&pFileInfo, &vUInfoSize))

             {

                       if(pData)

                       {

                                delete pData;

                       }

                       return false;

             }

     

             WORD vVer[4];  

             vVer[0] = HIWORD(pFileInfo->dwProductVersionMS);    

             vVer[1] = LOWORD(pFileInfo->dwProductVersionMS);  

             vVer[2] = HIWORD(pFileInfo->dwProductVersionLS);  

             vVer[3] = LOWORD(pFileInfo->dwProductVersionLS);   

             sprintf(vVersion, "%d.%d.%d.%d", vVer[0], vVer[1], vVer[2], vVer[3]);

     

             if(pData)

             {

                       delete pData;

             }

             string vVerStr = vVersion;

             vRetVersion = StringToQString(vVerStr);

     

             return vRetVersion;

    }
     
    2 Mac Os中获取执行文件app的版本号
     
    Mac Os 获取执行文件app的版本号需要从Info.plist文件中获取,
    Info.plist文件为XML格式 类似如下:
     




     CFBundleExecutable
     VxActuator
     CFBundleGetInfoString
     Created by Qt/QMake
     CFBundleIconFile
     
     CFBundleIdentifier
     com.yourcompany.VxActuator
     CFBundlePackageType
     APPL
     CFBundleSignature
     ????
     CFBundleVersion
     V0.8.0.001
     NOTE
     This file was generated by Qt/QMake.


    其中以下为文件版本信息
     CFBundleVersion
     V0.8.0.001
    注意: 如无以上信息,请在工程里设置 Version 项
     

    QString GetFileVertion(QString aFullName)

    {

             QString vRetVersion;

     

             QString vFullName = aFullName + "/Contents/Info.plist";

             if (!VxIsFileExist(vFullName))

             {

                       return "";

             }

            

             QFile vXmlFile(vFullName);

             if (!vXmlFile.open(QIODevice::ReadOnly))

             {

                       vXmlFile.close();

                       return "";

             }

                      

             QTextStream vReadStream(&vXmlFile);

             QTextCodec *vCodec = QTextCodec::codecForName("UTF-8");

             vReadStream.setCodec(vCodec);

             QString vXmlDataStr = vReadStream.readAll();

             vXmlFile.close();

     

             QDomDocument vXmlDoc;

             if (!vXmlDoc.setContent(vXmlDataStr))

             {

                       return "";

             }

             QDomElement vXmlRoot = vXmlDoc.documentElement();

             if (QString::compare(vXmlRoot.tagName(), "plist", Qt::CaseInsensitive) != 0)

             {

                       return "";

             }

            

             QDomNode vDictNode = vXmlRoot.namedItem("dict");

             if (vDictNode.isNull())

             {

                       return "";

             }

             QDomElement vDictElement = vDictNode.toElement();

     

             QDomNode vChildNode = vDictElement.firstChild();

             while(!vChildNode.isNull())

             {

                       QDomElement vChildElement = vChildNode.toElement();

                       if(QString::compare(vChildElement.tagName(), "key", Qt::CaseInsensitive) == 0)

                       {

                                if(QString::compare(vChildElement.text(), "CFBundleVersion", Qt::CaseInsensitive) == 0)

                                {

                                         vChildNode = vChildNode.nextSibling();

                                         vRetVersion = vChildNode.toElement().text();

                                         break;

                                }

                       }

                       vChildNode = vChildNode.nextSibling();

             }

     

             return vRetVersion;

    }

     

    转载于:http://blog.chinaunix.net/uid-20718335-id-2975923.html

  • 相关阅读:
    HTML 语义化标签-新增标签介绍
    HTML基础知识点
    Android JSON 解析关键代码
    [USACO16DEC]Cities and States省市
    [洛谷P1835]素数密度
    [洛谷P1168]中位数
    [HNOI2008]越狱
    [HAOI2007]上升序列
    [SHOI2009]Booking 会场预约
    [洛谷P1892][codevs2597]团伙
  • 原文地址:https://www.cnblogs.com/tingtaishou/p/14718289.html
Copyright © 2020-2023  润新知