1

私が書いたプログラムがあり、そのプログラムについてのボックスを作成しようとしています。最近、プログラムの製品バージョンを 1.00.0003 に更新しました。これをバージョン情報ウィンドウに反映させたいです。

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 セットアップの [一般情報] タブで設定されます。インストールすると、[プログラムと機能] に移動すると製品バージョンが 1.00.0003 と表示されるため、プログラムでこの値を取得するのがなぜ難しいのかわかりません。何か案は?

4

3 に答える 3

2

製品バージョンはアセンブリ バージョンと一致する必要があります。製品バージョン プロパティを実行可能ファイルのバージョン番号と自動的に一致させる方法をご覧ください。

于 2013-02-22T07:15:53.193 に答える
1

取得するバージョン 1.00.0003 は、製品のインストーラーのバージョンです。このバージョンをプログラムで取得するには、インストールされたファイルではなく、インストーラー (MSI ファイル) を検査する必要があります。それがあなたのやりたいことかどうかはわかりませんが、プログラムで MSI の ProductVersion をチェックするという質問に対する答えがあり、その方法を説明しています。

実行可能ファイルに同じバージョン番号を含めたい場合はAssemblyFileVersion、WindowsVERSIONINFOリソースなどの .NET 属性を使用して何らかの方法でバージョン番号を保存する必要があります。

InstallShield では、コマンド ラインで製品バージョンを指定できます。AssemblyFileVersionこれにより、製品バージョンを 1 つのファイルに保存し、それをインストーラーに埋め込まれた製品バージョンとアセンブリの両方のソースとして使用できます。

于 2013-02-22T07:22:30.930 に答える
0

インストーラーだけがこのバージョン情報を知っている場合、それを取得できる唯一の場所はレジストリになります。

レジストリ キーをアンインストールします。

次のインストーラ プロパティは、レジストリ キーの下に書き込まれた値を示します。

VersionMinor ProductVersion プロパティから派生

VersionMajor ProductVersion プロパティから派生

ProductVersion プロパティから派生したバージョン

しかし、私は @devdigital の (暗黙の) 提案に従います - インストーラーのバージョンと実際に一致するアセンブリ バージョンの 1 つが必要です。

于 2013-02-22T07:23:21.433 に答える