如何使用C#以编程方式获取正在运行的程序的产品(而非汇编)版本?

我有一个程序,我已经写了,我正在尝试创建一个关于框。 我最近将我的程序的产品版本更新为1.00.0003,我希望这可以反映在about窗口中。

aboutBox的默认设置显示值1.0.0.0,这是程序集版本,而不是产品版本。 从那以后,我一直在互联网上寻找如何展示产品版本。 我尝试了所有这些:

{ Assembly assembly = Assembly.GetExecutingAssembly(); FileVersionInfo fileVersionInfo = FileVersionInfo.GetVersionInfo(assembly.Location); string version = fileVersionInfo.ProductVersion; Debug.WriteLine(version); Debug.WriteLine(assembly.GetName().Version); string v = VersionNumber; Debug.WriteLine(v); Debug.WriteLine( fileVersionInfo.FileVersion); Debug.WriteLine(Application.ProductVersion); Debug.WriteLine(AssemblyProductVersion); Assembly assembly2 = Assembly.GetEntryAssembly(); FileVersionInfo fileVersionInfo2 = FileVersionInfo.GetVersionInfo(assembly.Location); string version2 = fileVersionInfo2.ProductVersion; Debug.WriteLine(version2); Debug.WriteLine(assembly2.GetName().Version); return version; } private string _ourVersion = "Version: v"; private string VersionNumber { get { System.Reflection.Assembly _assemblyInfo = System.Reflection.Assembly.GetExecutingAssembly(); if (System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed) _ourVersion += ApplicationDeployment.CurrentDeployment.CurrentVersion.ToString(); else { if (_assemblyInfo != null) _ourVersion += _assemblyInfo.GetName().Version.ToString(); } return _ourVersion; } } private static string AssemblyProductVersion { get { object[] attributes = Assembly.GetExecutingAssembly() .GetCustomAttributes(typeof(AssemblyInformationalVersionAttribute), false); return attributes.Length == 0 ? "" : ((AssemblyInformationalVersionAttribute)attributes[0]).InformationalVersion; } } 

其中每一个都返回1.0.0.0(是的,我确实在控制台中查找了它们的输出,而不是实际显示的内容),而不是我需要的1.00.0003。 产品版本在InstallShield设置的“常规信息”选项卡中设置。 安装时,转到程序和function显示产品版本为1.00.0003,所以我无法弄清楚为什么这么难以以编程方式检索此值。 有任何想法吗?

您的产品版本应与程序集版本匹配 – 请查看如何使产品版本属性自动匹配可执行文件的版本号

要检索的版本1.00.0003是产品安装程序的版本。 要以编程方式获取此版本,您需要检查安装程序(MSI文件),而不是已安装的文件。 我不确定这是你想要做什么,但有一个问题的答案,以编程方式检查MSI的ProductVersion ,解释如何做到这一点。

如果您希望可执行文件包含相同的版本号,则需要使用诸如AssemblyFileVersion类的.NET属性或Windows VERSIONINFO资源以某种方式存储版本号。

InstallShield允许您在命令行上指定产品版本。 这允许您将产品版本存储在单个文件中,然后将其用作安装程序中嵌入的产品版本以及程序集的AssemblyFileVersion的源。

如果只有安装程序知道此版本信息,则可以从中检索它的唯一位置是注册表。

卸载注册表项 :

以下安装程序属性提供在注册表项下写入的值:

VersionMinor派生自ProductVersion属性

VersionMajor派生自ProductVersion属性

版本派生自ProductVersion属性

但我会选择@ devdigital(暗示)的建议 – 你应该有一个与你的安装程序版本匹配的汇编版本。