2

アプリのカスタム自動アップデーターを作成しようとしています。もともとはInstallShieldとMSIを使用してインストールされました。プログラムの追加/削除に使用される情報は次の場所にあります。

HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ Windows \ CurrentVersion \ Uninstall {Guid}

Version、VersionMajor、VersionMinorを新しいバージョンと同じになるように更新すると(インストーラーを実行するとき)、パッチは正常に適用されます。それ以外の場合は、アプリの起動時に修復されます。

VersionMajorとVersionMinorはどちらも、プライマリExeのメジャーバージョンとマイナーバージョンに一致します。ただし、バージョンは乱数のようであり、Exeのバージョンのどの部分とも一致しません。それはどこから来たのですか?

たとえば、Exeのバージョンが5.12.0.2019の場合

このコードを実行してバージョン情報を取得できます

    class Program
{
    static void Main(string[] args)
    {
        FileVersionInfo vi = FileVersionInfo.GetVersionInfo(@"C:\MyApp.exe");
        Console.WriteLine("Version: {0}", vi.FileVersion);
        Console.WriteLine("Major: {0}", vi.FileMajorPart);
        Console.WriteLine("Minor: {0}", vi.FileMinorPart);
        Console.WriteLine("Build: {0}", vi.FileBuildPart);
        Console.WriteLine("Private: {0}", vi.FilePrivatePart);
        Console.WriteLine("Product Version: {0}", vi.ProductVersion);
        Console.WriteLine("Product Major: {0}", vi.ProductMajorPart);
        Console.WriteLine("Product Minor: {0}", vi.ProductMinorPart);
        Console.WriteLine("Product Build: {0}", vi.ProductBuildPart);
        Console.WriteLine("Product Private: {0}", vi.ProductPrivatePart);

        Console.Read();
    }
}

出力は

Version: 5.12.2019
Major: 5
Minor: 12
Build: 0
Private: 2019
Product Version: 5.12.2019
Product Major: 5
Product Minor: 12
Product Build: 0
Product Private: 2019

しかし、regにあるバージョンは、「118358017」のような9桁の数字であり、その情報のいずれとも一致しません。そこにプライベートバージョンが表示されることを期待していましたが、そうではありません

4

1 に答える 1

4

118358017 を 16 進数で見ると役立つ場合があります。

070E0001

MMmmBBBB の Major/minor/Build のパックされた DWORD であるという仮定の下でそれを分解した後、これは私には 7.14.1 のように聞こえます。

于 2012-04-12T11:42:19.547 に答える