更改exe时,FileVersionInfo返回错误的版本

时间:2016-02-22 06:23:36

标签: c# .net version fileversioninfo

我有一个场景,一个用户可以安装应用程序更新,而另一个登录用户正在运行该应用程序。

当其他用户重新连接到他们的会话时,会调用FileVersionInfo.GetVersionInfo(file)来检查是否发生了更新并且是否要重新启动应用程序。

但是,虽然文件资源管理器中的文件显示新版本号(同一版本用于文件和产品版本),但对GetVersionInfo()的调用将返回当前正在执行的版本 - 而不是磁盘上的版本。

我只设置[assembly: AssemblyVersion("A.B.C.D")]版本属性,并保留其他版本属性,使其默认为AssemblyVersion值。

string file = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, AppDomain.CurrentDomain.FriendlyName);
/// or
string file = @"C:\Program Files (x86)\Company\Product\product.exe";

FileVersionInfo info = FileVersionInfo.GetVersionInfo(file);
info.FileVersion; /// returns 1.0.0.0

然而,文件资源管理器中product.exe的文件版本(和产品版本)详细信息显示为2.0.0.0

我认为执行程序集必须引用某种虚拟化文件或VirtualStore中的路径,因为文件系统已更改。

如何可靠地获取product.exe目录中C:\Program Files (x86)\Company\Product所显示的实际文件版本?

要重现此问题,请使用以下Console应用程序:

using System;
using System.Diagnostics;
using System.IO;

namespace versiontest
{
    class Program
    {
        static void Main(string[] args)
        {
            string file = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, AppDomain.CurrentDomain.FriendlyName);
            Console.WriteLine("Getting FileVersion of {0}: {1}", file, FileVersionInfo.GetVersionInfo(file).FileVersion);

            Console.WriteLine("Modify the file and press any key to continue...");
            Console.ReadKey();

            Console.WriteLine("Getting FileVersion of {0}: {1}", file, FileVersionInfo.GetVersionInfo(file).FileVersion);

            Console.WriteLine("Press any key to exit...");
            Console.ReadKey();
        }
    }
}

构建应用程序的两个版本。第一个应该具有程序集版本属性,没有其他版本属性,在AssemblyInfo.cs中设置为:

[assembly: AssemblyVersion("1.0.0.0")]

第二个应该将版本设置为

[assembly: AssemblyVersion("2.0.0.0")]

执行版本1.0.0.0 app.exe,然后在检索到第一个文件版本后,将执行app.exe重命名为app.exe.bak并复制版本2.0.0.0 { {1}}进入同一个文件夹。

当我这样做时,这是我的控制台输出:

app.exe

如果您立即再次运行Getting FileVersion of C:\Users\User\Documents\Company\Source\product\testapp\bin\x86\Debug\app.exe: 1.0.0.0 Modify the file and press any key to continue... Getting FileVersion of C:\Users\User\Documents\Company\Source\product\testapp\bin\x86\Debug\app.exe: 1.0.0.0 Press any key to exit... ,作为版本app.exe应用程序,控制台输出将显示:

2.0.0.0

0 个答案:

没有答案