C# FileVersionInfo.GetVersionInfo替代方案

C# FileVersionInfo.GetVersionInfo替代方案,c#,file,version,fileversioninfo,C#,File,Version,Fileversioninfo,我有一个检查更新的应用程序。要检查更新,我需要获取用户计算机上文件的版本。 我使用了以下代码: if (File.Exists(dataFile)) { var verLocal = Version.Parse(FileVersionInfo.GetVersionInfo(dataFile).FileVersion); if (verSite > verLocal) { needToAdd = true; } } 今天我发现该方法可能无法获

我有一个检查更新的应用程序。要检查更新,我需要获取用户计算机上文件的版本。 我使用了以下代码:

if (File.Exists(dataFile))
{
    var verLocal = Version.Parse(FileVersionInfo.GetVersionInfo(dataFile).FileVersion);
    if (verSite > verLocal)
    {
        needToAdd = true;
    }
}
今天我发现该方法可能无法获得文件版本!以下是帮助中的描述:

如果文件不包含版本信息,则FileVersionInfo 仅包含所请求文件的名称

为了不出错,我这样做:

if (File.Exists(dataFile))
{
    if (Version.TryParse(FileVersionInfo.GetVersionInfo(dataFile).FileVersion, out var verLocal))
    {
        if (verSite > verLocal)
        {
            needToAdd = true;
        }
    }
}
但是现在有一个问题-如果用户使用此方法将永远不会返回文件的版本,那么用户将永远不会收到更新!因此,我需要一种方法来获取文件的版本,该版本始终有效


在c#?

中是否有替代方法,版本信息元数据实际上只应用可执行文件或DLL。它应该在编译期间设置。我没有看到它适用于任何word文档、图像或类似的不可执行文件

一种相当过时的归档方法是旧的归档Bit/Atribute。只是为了完整性把它扔出去

通常,对于“是否更改?”检查,只需检查文件大小和文件的最新更新日期即可。如果您选择任何备份制造商,它将不会执行比此更高级的检查(加上作为选项的存档位)。这两个值中的一个不变可能会发生。但他们两人都不太可能为这件事烦恼

检查更改的唯一100%*可靠方法是计算文件哈希值。但这通常只是在安装验证之类的过程中进行的,而不是作为基本备份


*从技术上讲,这甚至不是100%。哈希合并是一件事,但如果您已经检查了大小和更改日期,则实际上是不可能的。

您正在检查哪些更新?你自己的节目?计算机上的其他程序?还有别的吗?可能是复制品。看看那个帖子里的答案。@Herohtar我自己的档案@đěxěŕ事实上我看到了。有人怀疑由于用户缺乏访问权限而没有返回版本。如果这些文件是您自己的文件,只需确保始终包含版本信息,就可以避免问题。或者更好的办法是,将版本信息存储在其他地方,而不是试图从文件中提取;它是关于读取现有文件的版本以与应用程序的最新发布版本进行比较,以查看是否有可用的更新。@Herohtar措辞是“我有一个检查更新的应用程序”。检查文件是否需要更新的过程与备份过程相同。因为备份程序只是查看文件是否需要在备份中更新:)该程序可能会缓存一些数据,如哈希,以避免重新计算,但最终这是这个星球上每个安装程序都会做的。不是这样。检查可用更新通常通过将已安装应用程序的版本号与其他地方提供的版本号(例如,应用程序的网站)进行比较来完成。它通常也是针对单个版本号进行的,而不是基于每个文件。@Herohtar只有在有一个)版本号的情况下才有效。b) 它已正确更新。只需检查文件大小和日期,就不会出现此类问题,而且对于所有程序、共享程序和其他文件,都能可靠地工作“他们越是过度思考管道,就越容易堵塞排水管。”如果你控制文件(这里就是这种情况,根据OP的评论),那么你就可以确保有一个版本号,并正确更新它。OP不希望更新任意系统文件或其他程序。检查文件日期是一种非常不可靠的方法,因为有很多事情会导致文件日期发生更改。检查文件大小也不可靠,因为您的文件可能大小相同,并且它不会告诉您哪个文件较新。