zoukankan      html  css  js  c++  java
  • 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格式 类似如下:
     

    http://www.apple.com/DTDs/PropertyList-1.0.dtd">


     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

     
  • 相关阅读:
    jQuery火箭图标返回顶部代码
    网站开发之免费的图标库——iconfont
    网站开发之免费的图片库——undraw
    在webpack中使用echarts
    WeUI+的使用
    微信小程序引用自定义组件
    显示字符串中间加星号
    解决history的方法执行后不刷新页面的问题
    阻止input输入框弹出输入法
    使用taro框架开发小程序
  • 原文地址:https://www.cnblogs.com/findumars/p/5040429.html
Copyright © 2011-2022 走看看