【问题标题】:How to get the product Version number which is stored in the Deployment Project?如何获取部署项目中存储的产品版本号?
【发布时间】:2013-05-14 09:52:58
【问题描述】:

我有一个用 C# 编写的 WinForms 应用程序。有一个部署项目,它创建一个 setup.exe 并在其中设置版本号。

如何在运行时获取此版本号,以便将其写入日志或在“关于”框中显示?

我一直在使用以下代码,但它不适用于 64 位安装。

RegistryKey key = Registry.LocalMachine.OpenSubKey(
        @"Software\Microsoft\Windows\CurrentVersion\Uninstall");
string[] subKeyNames = key.GetSubKeyNames();

foreach (string subKeyName in subKeyNames)
{
    Microsoft.Win32.RegistryKey subKey2 = key.OpenSubKey(subKeyName);

    if (ValueNameExists(subKey2.GetValueNames(), "DisplayName") 
        && ValueNameExists(subKey2.GetValueNames(), "DisplayVersion"))
    {
        string name = subKey2.GetValue("DisplayName").ToString();
        string version = subKey2.GetValue("DisplayVersion").ToString();
        if(name == "MyAppName") return version;
    }
    subKey2.Close();
}
key.Close();
return "v?";

【问题讨论】:

    标签: c# .net winforms deployment


    【解决方案1】:

    你可以试试这个:

    string registry_key = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
    using (Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(registry_key))
    {
        foreach (string subkey_name in key.GetSubKeyNames())
        {
            using (Microsoft.Win32.RegistryKey subkey = key.OpenSubKey(subkey_name))
            {
                if (!object.ReferenceEquals(subkey.GetValue("DisplayName"), null))
                {
                    string[] str = subkey.GetValueNames();
                    string SoftNames = Convert.ToString(subkey.GetValue("DisplayName"));
                    if (SoftNames == "MyAppName")
                    {
                        string Vendor_Publisher = Convert.ToString(subkey.GetValue("Publisher"));
                        string Version = Convert.ToString(subkey.GetValue("DisplayVersion"));
                        string InstallDate = FormatDateTime(subkey.GetValue("InstallDate"));
                    }
    
                }
            }
        }
    }
    
    
    
    private static string FormatDateTime(object ObjInstallDate)
    {
        object FinalDate = DBNull.Value;
        string strDate = Convert.ToString(ObjInstallDate);
        DateTime dtm;
        DateTime.TryParseExact(strDate, new string[] { "yyyyMMdd", "yyyy-MM-dd", "dd-MM-yyyy" }, 
            System.Globalization.CultureInfo.InvariantCulture,
            System.Globalization.DateTimeStyles.None, out dtm);
        if (!String.IsNullOrEmpty(strDate))
        {                
            FinalDate = dtm;
        }
        return FinalDate.ToString();
    }
    

    【讨论】:

      【解决方案2】:

      如果您只是想在应用程序的 about 框中显示应用程序版本,您可以从静态属性中获取当前版本,如下所示:

      My.Application.Info.Version
      

      【讨论】:

      • 那是 C# 中的 System.Windows.Forms.Application.Info.Version 吗?如果是这样,它不起作用。未找到“信息”。
      • 适用于所有语言的是 System.Reflection.Assembly.GetExecutingAssembly().GetName().Version
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多