Windows installer 什么会导致MSI组件请求状态为空?

Windows installer 什么会导致MSI组件请求状态为空?,windows-installer,installshield,Windows Installer,Installshield,在InstallShield 2015中创建一个基本MSI安装,我们正在将文件部署到另一个基本MSI安装程序创建的目录中,我们也创建了这个目录。我不确定这条信息是否相关,或者我没有想到的其他变量可能相关。但这对于新安装来说很好,并将所有文件交付到我们想要的目录中。但是在升级了另一个安装,然后尝试升级这个安装之后,由于我无法解释的原因,它没有提供任何更新的文件(而且这些文件都有更新的版本),日志也帮不了什么忙。我最关心的是文件PublishRS.exe。这是日志中第一次出现: Action 11:

在InstallShield 2015中创建一个基本MSI安装,我们正在将文件部署到另一个基本MSI安装程序创建的目录中,我们也创建了这个目录。我不确定这条信息是否相关,或者我没有想到的其他变量可能相关。但这对于新安装来说很好,并将所有文件交付到我们想要的目录中。但是在升级了另一个安装,然后尝试升级这个安装之后,由于我无法解释的原因,它没有提供任何更新的文件(而且这些文件都有更新的版本),日志也帮不了什么忙。我最关心的是文件
PublishRS.exe
。这是日志中第一次出现:

Action 11:48:16: InstallValidate. Validating install
Action start 11:48:16: InstallValidate.
01]: Note: 1: 2205 2:  3: Shortcut 
MSI (s) (40:08) [11:48:16:201]: Note: 1: 2205 2:  3: Class 
MSI (s) (40:08) [11:48:16:201]: Note: 1: 2205 2:  3: TypeLib 
 (40:08) [11:48:16:200]: Feature: RSST; Installed: Local;   Request: Local;   Action: Local
MSI (s) (40:08) [11:48:16:200]: Component: PublishRS.exe; Installed: Local;   Request: Null;   Action: Null
MSI (s) (40:08) [11:48:16:200]: Component: FSReportService.asmx; Installed: Local;   Request: Null;   Action: Null
日志中对该文件的唯一其他引用是当它稍后尝试执行该文件时,由于该文件未更新而失败

有人能帮我解释一下我如何确定为什么没有复制
PublishRS.exe
?我认为这与
请求:Null
有关。真正令人不安且没有帮助的是,通常日志会说为什么它不复制文件,比如,文件已经存在,没有旧版本或其他东西,但这里我什么都没有。所以大部分关于它为什么不会复制的解释都被抛到了窗外。在阅读之后,我确实检查了我们没有改变任何组件,并确认了这一点。所以我被难住了。是什么原因导致升级安装时此组件(该组件包含在请求为本地的
RSST
功能中)出现
请求:Null

编辑:错误/旧日志位于--除了与旧评论进行比较外,不要查看此日志。它不是实际问题过程的表示

MSIENFORCEUPGRADECOMPONENTRULES无效,并包含在此日志中

编辑2:我发现安装在修复模式下工作正常。我想升级可能有一些我不了解的地方。为什么升级处理组件与修复不同?就MSI而言,什么是升级/更新?这和更新文件的修复不一样吗

编辑3:我之前提供的日志似乎不是最好的例子。我有一个更纯粹的日志,显示命令行确实包含IS\u MINOR\u升级。很抱歉给你带来了困惑。请查看此日志,而不是前面提到的日志:

日志不是安装日志。e、 g.它表示“跳过RemoveExistingProducts操作:当前配置为维护模式或卸载”和“组件:PublishRS.exe;已安装:Local;请求:Null;操作:Null”表示组件已安装,操作为维护“不做任何事情”,因此操作为Null。MSI没有进行升级,这意味着ProductCode没有更改,并且存在主要的升级逻辑

从文章中不清楚您是否打算进行Windows Installer主要升级,但如果是这样,则新的MSI必须具有新的产品代码、相同的升级代码、前三位递增的版本以及MSI文件中按顺序排列的FindRelatedProducts和RemoveExistingProducts


您可能会考虑使用相同的产品代码(和增量版本)重新安装修改后的MSI,但需要命令行安装,其中包括重新安装=所有重新安装模式=vomus(不建议使用vamus)。然而,InstallShield似乎控制着基础MSI的安装方式,因此也不清楚它认为自己正在进行什么类型的更新,或者InstallShiel的最终命令提供了什么,但“升级”一词的指示和使用意味着这是一次重大升级

似乎摆弄UI序列会带来灾难性的后果。在升级过程中,我们需要提示一些信息,我相信通过在“SetupResume”序列中包含一个对话框,该对话框设计为在安装和维护序列中运行良好,我相信这也是升级过程中使用的对话框,我们导致InstallShield对话框被拉入升级序列,而该序列并不是设计为该序列的一部分,这迫使安装返回错误模式,而不是升级。其中一个InstallShield对话框正在调用AddLocal,例如,这可能不会在升级时发生。

我会将整个日志发布到某个地方。我还将MSIENFORCEUPGRADECOMPONENTRULES设置为1,以再次检查组件规则是否已被破坏。另外,请确保在两个产品中,相同的文件以相同的组件guid传递到相同的位置。不清楚在您的帖子中是否存在这种情况。日志不是安装日志。e、 g.它表示“跳过RemoveExistingProducts操作:当前配置为维护模式或卸载”和“组件:PublishRS.exe;已安装:Local;请求:Null;操作:Null”表示组件已安装,操作为维护“不做任何事情”,因此操作为Null。MSI没有进行升级,这意味着ProductCode没有更改,并且有主要的升级逻辑。@PhilDW我也是这么想的,但是出现了升级对话框,那么为什么它告诉我它将进行升级,并结束维护模式呢?这可能与InstallShield有关,而不仅仅是MSI。我有一种感觉,它也忘记了INSTALLDIR的值,并在安装过程中将其从默认位置重置为正确位置。是的,看起来您的InstallShield配置不正确。主要问题可能是新MSI的产品代码与系统上已安装的产品代码相同。我运行了InstallShield的升级验证,它表明将执行一个小的更新。那为什么这看起来这么像