设为首页 收藏本站
查看: 967|回复: 0

[经验分享] Qt在windows与Mac OS中获取执行程序版本号

[复制链接]
累计签到:1450 天
连续签到:1 天
发表于 2015-12-31 09:56:04 | 显示全部楼层 |阅读模式
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.iyunv.com/uid-20718335-id-2975923.html

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-158711-1-1.html 上篇帖子: VMware 9.0.1安装Mac OS X Mountain Lion 10.8.2 下篇帖子: [转] mac os 下RabbitMq 以及 PHP amqp扩展安装记录
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表