0

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

if (File.Exists(dataFile))
{
    var verLocal = Version.Parse(FileVersionInfo.GetVersionInfo(dataFile).FileVersion);
    if (verSite > verLocal)
    {
        needToAdd = true;
    }
}

今天发现FileVersionInfo.GetVersionInfo(String)方法可能获取不到文件版本!以下是帮助中的描述:

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

为了没有错误,我这样做了:

if (File.Exists(dataFile))
{
    if (Version.TryParse(FileVersionInfo.GetVersionInfo(dataFile).FileVersion, out var verLocal))
    {
        if (verSite > verLocal)
        {
            needToAdd = true;
        }
    }
}

但是现在有一个问题——如果用户这个方法永远不会返回文件的版本,那么用户永远不会收到更新!所以我需要一种方法来获取始终有效的文件版本。

在 c# 中是否有此方法的替代方法?

4

1 回答 1

-2

该版本信息元数据实际上仅适用于可执行文件或 DLL。它应该在编译期间设置。我还没有看到它适用于(被写入)任何 word 文档、图像或类似的不可执行文件。

一种非常过时的归档方法是旧的归档位/属性。只是为了完整性把它扔在那里。

通常用于“它改变了吗?” 检查,只需检查文件的文件大小和 LastUpdated 日期以进行更改就足够了。如果您选择任何备份制造商,它不会进行更高级的检查(加上存档位作为选项)。这两个值之一不会改变可能会发生。但他们俩都不太可能打扰。

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

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

于 2019-10-17T19:51:56.967 回答