版本DWORD来自卸载注册表项(Windows Installer)?

时间:2012-04-12 07:07:28

标签: windows-installer

我正在尝试为我们的应用编写自定义自动更新程序。它最初使用InstallShield和MSI安装。我发现用于添加/删除程序的信息位于

HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \微软\的Windows \ CurrentVersion \卸载{GUID}

如果我将版本,VersionMajor和VersionMinor更新为与新版本相同(当我运行安装程序时),则补丁适用,否则它会在应用程序启动时进行修复。

VersionMajor和VersionMinor都匹配Primary Exe的Major和Minor版本。版本虽然似乎是一个随机数,但不能与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位数字,与任何信息都不匹配。我期待在那里看到私人版本,但事实并非如此

1 个答案:

答案 0 :(得分:2)

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

070E0001

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