Qt在windows与Mac OS中获取执行程序版本号
1 windows中获取执行文件exe的版本号QString GetFileVertion(QString aFullName)
{
QString vRetVersion;
string vFullName = QStringToString(aFullName);
char vVersion = {0};
DWORD vHandle = 0;
DWORD vInfoSize = 0;
vInfoSize = ::GetFileVersionInfoSize(vFullName.c_str(), &vHandle);
if(vInfoSize <= 0)
{
return false;
}
char *pData = new char;
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;
vVer = HIWORD(pFileInfo->dwProductVersionMS);
vVer = LOWORD(pFileInfo->dwProductVersionMS);
vVer = HIWORD(pFileInfo->dwProductVersionLS);
vVer = LOWORD(pFileInfo->dwProductVersionLS);
sprintf(vVersion, "%d.%d.%d.%d", vVer, vVer, vVer, vVer);
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]