我正在尝试获取文件的版本。我想查看此文件的版本号以确定未引导驱动器上安装了哪个操作系统(我实际上是在 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() 并且我无法以某种方式找到该信息,我是否使用不正确等等?
最佳答案
问题不在于电话,而在于您的作业;你需要周围的 parent :
if ( ( versionDataSize = GetFileVersionInfoSize(fileName, NULL) ) != 0)
您编写的内容为表达式 size != 0
赋值,1 表示真。
关于c++ - GetFIleVersionInfoSize() 成功但返回不正确的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24891777/