Windows installer DWORD版本在卸载注册表项(Windows Installer)中来自何处?

Windows installer DWORD版本在卸载注册表项(Windows Installer)中来自何处?,windows-installer,Windows Installer,我正在尝试为我们的应用程序编写一个自定义自动更新程序。它最初是使用InstallShield和MSI安装的。我发现用于添加/删除程序的信息位于 HKEY\U LOCAL\U MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall{Guid} 如果我将版本、VersionMajor和VersionMinor更新为与新版本相同的版本(当我运行安装程序时),则补丁可以正常应用,否则它会在应用程序启动时进行修复 Ve

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

HKEY\U LOCAL\U MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall{Guid}

如果我将版本、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中的版本是一些9位数的数字,比如“118358017”,与任何信息都不匹配。我本来希望看到其中的私有版本,但事实并非如此

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

070E0001

在假设它是MMBBBB的主/次/构建的压缩DWORD之后,对我来说这听起来像7.14.1。

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

070E0001

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

我编写了一些代码,将其转换为System.Version对象。请查看我的答案,我写了一些代码将其转换为System.Version对象。请看我对你的回答