我正在尝试获取文件的版本。我想看看这个文件的版本号,以确定在未启动的驱动器上安装了哪个操作系统(我实际上是从Win PE环境中执行此操作并尝试确定主驱动器是否具有Windows XP或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()是否已弃用,我无法找到该信息,我是否正确使用它等等?
答案 0 :(得分:4)
问题不在于通话,而在于你的作业;你需要它周围的parens:
if ( ( versionDataSize = GetFileVersionInfoSize(fileName, NULL) ) != 0)
你所写的内容赋予了表达式size != 0
的值,该值为1表示真实。