C ++的VisualStudio GetFileVersionInfo(C++ VisualStu

2019-10-17 13:59发布

我下载了这个类http://www.codeproject.com/file/VersionInfo.asp

我用它来得到我目前运行几个程序的文件信息。

它工作正常,当我想从我写的程序信息,但我不能让“铬”还是我的“视觉工作室”为例的文件信息。

当我询问我的应用程序的产品名称,我得到“TODO:产品名称”,因为它并没有被设定;)

但是当我查询的chrome.exe的产品名称,我只是得到“”没什么。

是否anynone知道为什么吗?

编辑:我调试一点点和probleme在这里。

BOOL CFileVersionInfo::Open( IN LPCTSTR lpszFileName )
{  
if( lpszFileName == NULL )
    ASSERT_RETURN( FALSE );

Close();
if( !GetVersionInfo( lpszFileName ) || !QueryVersionTrans() )
    Close();

return m_bValid;
};

该GetVersionInfo(lpsz ...)并返回0;如果“的chrome.exe”进入

编辑2:是的chrome.exe有一个产品名称字段。

例如:的chrome.exe - 文件描述:谷歌浏览器 - 类型:应用程序 - 文件版本:23.0.1271.97 - 产品名称:谷歌浏览器 - 产品版本:23.0.1271.97 - 版权所有:..blabla - 大小:1.18MB - 修改日期:some_date - 语言:英语 - 原始文件名:的chrome.exe

编辑3:我怎样才能获得的完整路径的exe? 我只是进程ID。 目前IAM遍历所有进程和搜索我的ProcessID。

感谢到目前为止对你的回答:-)

Answer 1:

我怎样才能获得完整路径exe文件?

使用OpenProcess()得到一个HANDLE的过程,然后用QueryFullProcessImageName()获得EXE文件的完整路径。

记住要检查的结果GetLastError()以确定失败的原因。



Answer 2:

这对我来说工作正常

#include <windows.h>
#include <vector>
#include <string>
#pragma comment( lib, "Version.lib" )

std::string processId_2_version( int processId )
{
    HANDLE h = OpenProcess( PROCESS_QUERY_INFORMATION, FALSE, processId );
    if ( h == 0 )
    {
        return "";
    }
    char exe[ 1024 ];
    DWORD exe_size = 1024;
    QueryFullProcessImageNameA( h, 0, exe, & exe_size );
    CloseHandle( h );
    DWORD dwHandle, sz = GetFileVersionInfoSizeA( exe, & dwHandle );
    if ( 0 == sz )
    {
        return "";
    }
    std::vector< unsigned char > buf( sz );
    if ( !GetFileVersionInfoA( exe, dwHandle, sz, & buf[ 0 ] ) )
    {
        return "";
    }
    VS_FIXEDFILEINFO * pvi;
    sz = sizeof( VS_FIXEDFILEINFO );
    if ( !VerQueryValueA( & buf[ 0 ], "\\", (LPVOID*)&pvi, (unsigned int*)&sz ) )
    {
        return "";
    }
    char ver[ 142 ];
    sprintf( ver, "%d.%d.%d.%d"
            , pvi->dwProductVersionMS >> 16
            , pvi->dwFileVersionMS & 0xFFFF
            , pvi->dwFileVersionLS >> 16
            , pvi->dwFileVersionLS & 0xFFFF
            );
    return ver;
}


文章来源: C++ VisualStudio GetFileVersionInfo