Installation 主要升级-.exe文件未重新安装

Installation 主要升级-.exe文件未重新安装,installation,windows-installer,major-upgrade,Installation,Windows Installer,Major Upgrade,我有一个.msi文件,由一个名为MSICREATE的程序创建,并使用orca修改,如下所示 InstallExecuteSequence表 * added FindRelatedProducts with sequence 410 * added RemoveExistingProducts with sequence 1450 * added FindRelatedProducts with sequence 200 安装顺序表 * added FindRelatedProducts wi

我有一个.msi文件,由一个名为MSICREATE的程序创建,并使用orca修改,如下所示

InstallExecuteSequence表

* added FindRelatedProducts with sequence 410
* added RemoveExistingProducts with sequence 1450
* added FindRelatedProducts with sequence 200
安装顺序表

* added FindRelatedProducts with sequence 410
* added RemoveExistingProducts with sequence 1450
* added FindRelatedProducts with sequence 200
不动产表

* added RemovePreviousVersions TRUE
* added SECURECUSTOMPROPERTIES SOLARUPGRADE
* had a existing UpgradeCode with guid created by MSICREATE
* had a existing ProductVersion 12.2.12.0 created my MSICREATE
添加了一个升级表

* UpgradeCode same value as Upgrade in Property Table
* VersionMin null
* VersionMax 99.12.31
* Attributes 1
* ActionProperty SOLARUPGRADE (same value as SECURECUSTOMPROPERTIES in Property Table)
我还分配了一个新的PackageCode和一个新的ProductCode,因此新的msi的PackageCode、ProductCode和ProductVersion的值与以前安装的产品不同

当我使用以前安装的产品运行此msi时,旧产品将被删除,新的程序文件目录将创建,除.exe之外的所有文件将从新的.msi重新安装。修复将导致创建.exe。如果在删除旧产品后安装了新msi(使用“控制面板添加/删除程序”),则会安装包括.exe在内的所有文件

msiexec日志文件是mywebspace.wisc.edu/mdorl/msilog/log3.log

.msi是mywebspace.wisc.edu/mdorl/msilog/sbl_Major_Upgrade.msi

唯一让我觉得奇怪的是日志中的以下几行。第一个、第二个和第四个是未安装的文件,第三个是未安装的.exe文件注意此条目上的空操作

Action start 8:04:41: InstallValidate.
MSI (s) (18:F4) [08:04:41:671]: Feature: _MainFeature; Installed: Absent;   Request: Local;   Action: Local
MSI (s) (18:F4) [08:04:41:671]: Component: _24A30964F6B6462282E161248AF15827; Installed: Absent;   Request: Local;   Action: Local
MSI (s) (18:F4) [08:04:41:671]: Component: _7B95B32E33EB4F699B44D53CA5BC22B5; Installed: Absent;   Request: Local;   Action: Local
MSI (s) (18:F4) [08:04:41:671]: Component: _2FBD153583AF40C09EB9920149F7C7B7; Installed: Absent;   Request: Local;   Action: Null
MSI (s) (18:F4) [08:04:41:671]: Component: _38A400D7DB76479CA0EC6D643D5793CD; Installed: Absent;   Request: Local;   Action: Local

如果查看日志第603行,您将发现以下内容:

MSI(18:10)[08:04:41:827]:不允许卸载组件:{ADC6C3E9-A0CF-4AFC-9998-7B9449C8EA10},因为存在另一个客户端 MSI(18:10)[08:04:41:827]:不允许卸载组件:{F74907E7-607E-49D1-B613-D63A36ADB020},因为存在另一个客户端 MSI(18:10)[08:04:41:827]:不允许卸载组件:{B1FE4023-E176-42BC-92C3-15B8E50CFBB0},因为存在另一个客户端 MSI(18:10)[08:04:41:827]:不允许卸载组件:{E6F5DF5D-3460-4B44-8743-48787E68A2C1},因为存在另一个客户端

如果在同一台计算机上安装的多个软件包之间共享相同的组件,则可能发生这种情况。Windows Installer保留组件的引用计数,并允许删除这些组件,直到删除使用它们的所有应用程序

如果您在测试/开发机器上遇到这种情况,我建议在干净的VM上进行测试,以确保以前的其他测试不会影响这种测试


此外,如果您知道在包中为其他应用程序使用了相同的组件,请编辑这些组件,确保每个组件都有一个唯一的包GUID。

Windows Installer使用密钥文件检测组件及其GUID,以下是详细信息:

正如您所怀疑的,Windows Installer也在检查文件版本,我假设您在新版本中正确地增加了该版本。以下是它遵循的规则:

您需要将EXE文件表中的版本列设置为高于计算机上已存在的版本列的值,否则Windows Installer将决定保留旧版本,因为它的版本更高


文件表中的条目都没有版本。为什么会对非.exe文件进行不同的处理并重新安装

我想其他文件的版本增加了。Windows Installer应该对包中的所有文件应用版本控制规则


这意味着用户不可能使用主要的msi升级来安装旧版本的产品

如果你想在新软件包中保持较小的版本,我看不到解决方案。当然,自定义操作除外


什么是法律版本?在一个地方我看到255.255.65535,在另一个地方我看到65535.65535.65535.65535

它们都是正确的版本号。后一个值通常设置为一个文件,以确保它替换机器上的任何其他现有文件,即操作系统允许的最高版本号。

为了结束这个项目,以下是我的发现和我所做的修复工作

1) 我仍然不清楚版本化/未版本化文件的含义。我想所有的.exe文件都有版本。我想这意味着这些文件需要文件表中相应的版本

2) 我现在了解到文件表版本不需要与ProductVersion连接

3) 我一直在使用非法产品版本,例如2012.02.16。我改用12.2.16之类的东西

4) 我在Visual Studio中设置了.exe VS_VERSION_INFO FILEVERSION,并将相同的值添加到文件表版本字段中


现在,当我进行重大升级时,所有文件都将被替换。

感谢您提醒我注意这一点。我认为问题在于以下行MSI(c)(CC:30)[08:04:28:686]:不允许安装组件:{6255BB7E-70D5-494B-B9BE-C50304C2254D}因为存在具有更高版本密钥文件的相同组件,那么密钥文件是什么?MSIEXEC正在查看嵌入在.exe文件中的版本信息吗?的确,旧exe的版本高于新exe。文件表中的条目都没有版本。为什么会对非.exe文件进行不同的处理并重新安装?这意味着用户不可能使用主要升级msi安装较旧版本的产品?什么是合法版本?在一个地方我看到255.255.65535,在另一个地方我看到65535.65535.65535.65535,文件表中有四个条目。没有一个零垃圾有版本!!!!!那么为什么.exe会被区别对待呢?这里它说ProductVersion的主要部分和次要部分(属性和升级表)必须是255或更少。那么,这是否意味着文件表中的版本号与属性表和升级表中的版本中的版本无关?