刷新Program Files目录下的FileVersionInfo

本文关键字:FileVersionInfo Program Files 刷新 | 更新日期: 2023-09-27 18:14:45

我有一个带有FileSystemWatcher的程序,它监视自己被外部程序更新为新版本(这涉及重命名当前可执行文件并在其位置复制新版本)。

问题是,当它正在观看的文件是在Program Files目录,FileVersionInfo.GetVersionInfo()没有得到新的版本信息,它返回相同的东西,它得到了第一次。所以如果它从1.1升级到1.2,它会说"从1.1升级到1.1"而不是"从1.1升级到1.2"。它在调试目录下正常工作,但在Program Files下,它不会得到正确的值。

这里是它所做的事情的本质,没有所有的异常处理,处置,日志记录和线程调用等等:

string oldVersion;
long oldSize;
DateTime oldLastModified;
FileSystemWatcher fs;
string fullpath;
public void Watch()
{
    fullpath = Assembly.GetEntryAssembly().Location;
    oldVersion = FileVersionInfo.GetVersionInfo(fullpath).ProductVersion;
    var fi = new FileInfo(fullpath);
    oldSize = fi.Length;
    oldLastModified = fi.LastWriteTime;
    fs = new FileSystemWatcher(
        Path.GetDirectoryName(fullpath), Path.GetFileName(file));
    fs.Changed += FileSystemEventHandler;
    fs.Created += FileSystemEventHandler;
    fs.EnableRaisingEvents = true;
}
void FileSystemEventHandler(object sender, FileSystemEventArgs e)
{
    if (string.Equals(e.FullPath, fullpath, StringComparison.OrdinalIgnoreCase))
    {
        var fi = new FileInfo(fullpath);
        if (fi.Length != oldSize
            || fi.LastWriteTime != oldLastModified)
        {
            var newversion = FileVersionInfo.GetVersionInfo(fullpath).ProductVersion;
            NotifyUser(oldVersion, newversion);
        }
    }
}

如何使GetVersionInfo()刷新以查看新版本?我该打给别的什么人吗?

刷新Program Files目录下的FileVersionInfo

我在回答我自己的问题,因为似乎没有太多的兴趣。如果有人有更好的答案,我就接受了……

据我所知,没有办法使它刷新。相反,我解决了这个问题:

return AssemblyName.GetAssemblyName(fullpath).Version.ToString();

与确保它只被调用一次的代码相结合,它似乎工作得很好。