如标题所属.
看了FileInfo里没有文件版本信息,不知道如何获取,望赐教.

解决方案 »

  1.   

    System.Reflection.Assmbly.GetExecutingAssembly().GetName().Version.ToString()
      

  2.   

    FileVersionInfo myFileVersion = FileVersionInfo.GetVersionInfo(strFileFullName);

    String strFileVersion = string.Format("{0}.{1}.{2}.{3}",myFileVersion.FileMajorPart, myFileVersion.FileMinorPart, myFileVersion.FileBuildPart, myFileVersion.FilePrivatePart);
      

  3.   

    可能我描述的不是很好,是这样的,用C#写一个主程序,在帮助里列出所有组成系统的模块.所有模块可能是C#编写的可执行程序/DLL,VC编写的DLL/EXE,VB编写的EXE,DEPHI编写的EXE.在帮助模块中需要列出所有以上模块的版本号,例如:2.3.5.53,程序本身的版本号自然比较容易获取.查阅了MSDN后,发现以下API有可能可以实现,不过文档太少,VerQueryValue不知如何使用:
    [DllImport("version.dll")]
    private static extern int GetFileVersionInfoSize(
                              string lpstrFilename , 
                              int lpdwHandle);[DllImport("version.dll")]
    private static extern int GetFileVersionInfo(
                              string lpstrFilename , 
                              int dwHandle,
                              int dwLen,
                              byte[] lpData);

    [DllImport("version.dll")]
    private static extern int VerQueryValue(
                              byte[] lpVersionDataBuffer , 
                              string lpSubBlock,
                              byte[] lpBuffer,
                              ref int lpBufferLength);不知各位大侠是否有简单点的方法.或者C#中是否有简单些的方法.
      

  4.   

    Assembly assembly = Assembly.LoadFrom(yourDll);
    Version ver = assembly.GetName().Version;
      

  5.   

    呵呵,是这样的,整个应用系统有很多EXE和DLL组成,其中主程序用C#写的.主程序的帮助模块界面中需要显示现在已经安装了那些独立的模块(包括DLL和EXE文件),
    在界面中显示如下类似信息:已安装如下模块:
    aaaa.exe 版本1.2.3.332
    bb.exe   版本3.4.5.366
    t.dll    版本4.4.3.33需要在C#中实现去读取这些文件的版本号信息,但这些文件不全是C#编写的,
    又很多是用VC编写的. 
      

  6.   

    使用:
    System.Reflection.Assembly fileAssembly = System.Reflection.Assembly.LoadFrom(searchFile);
    System.Version fileVersion = fileAssembly.GetName().Version;只能得到C#编写的程序版本,其它开发工具例如VC或VB编写的程序或模块版本都得不到.
      

  7.   

    谢谢各位,自己找资料做了一下,给大家共享,用vc做了个动态库.extern "C" int PASCAL EXPORT PSATryGetFileVersion(
    LPTSTR lpszFileName, 
    DWORD* iMajor, 
    DWORD* iMinor, 
    DWORD* iRelease, 
    DWORD* iBuild
    )
    {
    AFX_MANAGE_STATE(AfxGetStaticModuleState());

    int               iVersionInfoSize = 0;
    BYTE*             lpVersionDataBuffer;
    int               retval = 0;
    int               res    = -999;
    BYTE*             lplpVersion;
    VS_FIXEDFILEINFO* version;
             DWORD             dwVersionSize;
       
    if (lpszFileName == NULL)
    {
    return(res);
    } iVersionInfoSize = GetFileVersionInfoSize(lpszFileName,0);
    if (iVersionInfoSize > 0)
    {
    lpVersionDataBuffer = new BYTE[iVersionInfoSize];
    retval = GetFileVersionInfo  (lpszFileName,0,iVersionInfoSize,lpVersionDataBuffer);
    if (retval != 0)
    {
    retval = VerQueryValue(lpVersionDataBuffer,"\\",(void**)&lplpVersion,(unsigned int*)&dwVersionSize);
    if (retval != 0)
    {
    version = (VS_FIXEDFILEINFO*)lplpVersion; 
    *iMajor = version->dwFileVersionMS >> 16;
    *iMinor = version->dwFileVersionMS & 0xFFFF;
    *iRelease = version->dwFileVersionLS >> 16;
    *iBuild   = version->dwFileVersionLS & 0xFFFF;
    res = 0;
    }
    else
    {
    res = -3;
    }
    }
    else
    {
    res = -2;
    }
    if (lpVersionDataBuffer != NULL)
    {
    delete lpVersionDataBuffer;
    lpVersionDataBuffer = NULL;
    }
    }
    else
    {
    res = -1;
    } return(res);
    }
      

  8.   

    我给的方法没用?至少是c#,vb,vc写dll, exe 都能读出版本信息的阿!
      

  9.   

    ^_^ 不好意思,看错了.没试.结贴.感谢 xvting(xvting)的最后回复.