我正在尝试获取文件的版本。我想看看这个文件的版本号,以确定哪个操作系统安装在一个非引导驱动器上(实际上,我将在一个Win PE环境中这样做,并试图确定主驱动器是否安装了Windows或Windows 7)。总之,我有以下几点
wchar_t *fileName;
fileName = new wchar_t[255];
lstrcpy(fileName, hdds[HardDriveIndexes::SystemDrive].driveLetter.c_str());
lstrcat(fileName, L"Windows\\System32\\winload.exe");
TCHAR *versionInfoBuffer;
DWORD versionDataSize;
if (versionDataSize = GetFileVersionInfoSize(fileName, NULL) != 0)
{
versionInfoBuffer = new TCHAR[versionDataSize];
BOOL versionInfoResult = FALSE;
versionInfoResult = GetFileVersionInfo(fileName, NULL, versionDataSize, versionInfoBuffer);
if (versionInfoResult == FALSE)
{
wprintf(L"The last error associated with getting version info is: %d\n", GetLastError());
}
}
else
{
wprintf(L"The last error associated with gettting version info size is: %d\n", GetLastError());
}
问题是GetFileVersionInfoSize()成功了,但总是返回1作为大小。这将导致GetFileVersionInfo()因错误122而失败。到目前为止,我只在Windows 7系统上对此进行了测试。还有另一个函数GetFileVersionInfoSizeEx()按预期工作,但它只支持从Vista开始。如果可能的话,我想保持XP的支持(我们的一些旧的Win PE映像仍然是基于XP的)。
GetFileVersionInfoSize()被废弃了吗?我不知怎么找不到这些信息,我是不是不正确地使用它,等等?
发布于 2014-07-22 17:29:44
问题不在于电话,而在于你的任务;你需要在它周围的父母:
if ( ( versionDataSize = GetFileVersionInfoSize(fileName, NULL) ) != 0)
您所写的内容指定表达式size != 0
的值,该表达式为1表示为true。
https://stackoverflow.com/questions/24891777
复制相似问题