Альтернатива FileVersionInfo.GetVersionInfo - PullRequest
0 голосов
/ 17 октября 2019

У меня есть приложение, которое проверяет наличие обновлений. Чтобы проверить наличие обновлений, мне нужно получить версию файла на компьютере пользователя. Я использовал этот код:

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 #?

1 Ответ

0 голосов
/ 17 октября 2019

В метаданные информации о версии действительно применяются только исполняемые файлы или библиотеки DLL. Он должен быть установлен во время компиляции. Я не видел, чтобы это применялось (писалось) к любому текстовому документу, изображению или подобному неисполняемому файлу

Довольно устаревшим подходом к архивированию будет старый Archive Bit / Atribute. Просто выкидываю это для полноты.

Обычно для "это изменилось?"проверьте, достаточно просто проверить размер файла и даты последнего обновления файла на предмет изменений. Если вы выберете любого создателя резервных копий, он не будет выполнять более сложные проверки, чем этот (плюс опция архива с битами). То, что одно из этих двух значений не меняется, может случиться. Но вряд ли они оба будут беспокоиться.

Единственный 100% * надежный способ проверить изменения - это вычислить хеш-значение файла. Но это обычно то, что вы делаете только во время таких вещей, как проверки установки, а не в качестве базовой резервной копии.

* Технически даже это не 100%. Хэширование - вещь, но реально невозможна, если вы уже проверили размер и изменили дату.

...