从未执行的可执行文件中获取版本信息

7

我知道如何获取正在执行的应用程序或dll的版本。 但是,我需要查找非正在执行的应用程序的属性。

我有一个小程序,用于为我的主要应用程序设置文件关联。老版本的用户运行此程序没有意义,因为该应用程序在启动时不接受参数。因此,当文件关联器启动时,它首先检查是否可以找到主应用程序。如果可以,则希望在不执行它的情况下检查其属性。如果版本早于可以接受参数的版本,则希望告诉用户更新而不是继续设置关联。

我已经查看了System.IO.FileInfo,但似乎没有包含任何版本信息。

谢谢


在Windows中,文件没有版本信息。 - Hogan
2
@hogan 显然,.exe和.dll文件在某个地方存储了这些信息,因为您可以通过右键单击、选择属性,然后选择详细信息来查看它。它就在那里。 - dandan78
2
PE文件可以在Windows上具有版本信息。它位于嵌入PE文件中的资源内部。 - CodesInChaos
@Hogan 所谓“非执行”,是指磁盘上的 exe 文件,目前并未作为进程在执行。 - Shadow The Spring Wizard
@dandan78 @Shadow - 我误读了问题。当然,版本信息包含在.dll和.net exes的元数据中。当然,并不保证可执行文件(例如.com)存在此信息。这与提供版本信息的操作系统(例如VMS)非常不同。 - Hogan
1个回答

13

您可以使用 FileVersionInfo.GetVersionInfo() 方法:

FileVersionInfo vi = FileVersionInfo.GetVersionInfo("myfile.dll");

字符串showVersion = vi.FileVersion;

//showVersion是实际的版本号。

此代码返回文件/文档元数据,可用于非托管DLL甚至Word文档。

您还可以使用Assembly:

Version v = Assembly.ReflectionOnlyLoadFrom("myfile.dll").GetName().Version;

这将包含.NET版本信息


正是我所需要的,而且非常简单! - ScruffyDuck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接