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

但是注册中的版本是一些 9 位数字,例如“118358017”,与任何该信息都不匹配。我期待在那里看到私人版本,但事实并非如此

4

1 回答 1

4

以十六进制查看 118358017 可能会有所帮助:

070E0001

在假设它是 MMmmBBBB 的主要/次要/构建的压缩 DWORD 后将其拆分后,这对我来说听起来像是 7.14.1。

于 2012-04-12T11:42:19.547 回答