2016-07-12 19 views
0

我试图深入了解一些间歇性问题,我们遇到一些主要的升级安装,在运行msiexec时针对维护安装进行评估一个msi。 MSDN给出了Uninstall registry key的简要说明,并声明版本是从ProductVersion属性派生的。HKLM S .. CurrentVersion Uninstall从ProductVersion属性派生的版本

我的问题是怎么回事?例如'16 .48.31'如何转换为'0x1030001f(271581215)'? VersionMajor和VersionMinor分别很简单,分别是'16'和'48'。另一方面,版本并非如此。

答案可能与我的问题不相关,但我已经用尽了其他线索追查。

+0

0x001f == 31,最大值是65535. –

+0

我明白了。所以它是一个字节,一个字节,两个字节汇集成一个数字。 DERP。 0x1030打破到: 为0x10 = 16 的0x30 = 48 0x001f = 31 感觉不好意思... – NixQuips

回答

0

你的问题很可能是你有没有更新都的ProductVersion产品代码并在更新设置包代码。这产生了小升级而不是所需的主升级

程序包代码应该在每次安装程序编译时更改,因为它只被认为是唯一的。如果两个MSI文件具有相同的软件包代码,Windows安装程序将其视为同一个文件,并且可能会导致出现奇怪的问题 - 包括您所看到的行为。

我只想确保您没有使用Installshield Installscript MSI项目?这是运行Installshields GUI而不是常规MSI GUI的特殊项目类型。项目类型充满了问题,不应使用。相反,你应该使用基本的MSI项目。

+0

使用维克斯和ProductVersion获取与每个版本递增。在这种情况下,16.48.31中的31是16.48版本的第31版。我们还为每个构建生成一个新的ProductCode和包代码GUID。我已经通过使用Orca的MSI进行了审视,并且已经验证我们正在增加每个后续版本的版本。我还验证了两个GUID对每个MSI都是唯一的。 – NixQuips

+0

但是,我看到的是,ProductState正在对我们的主要升级进行评估,我认为这反映了现实。问题在于它正在注册为维护模式,因此我们的一些与停止/启动应用程序池和Windows服务有关的自定义操作未被调用。 – NixQuips