更新后服务不启动;如何做组件之间的依赖关系
Posted
技术标签:
【中文标题】更新后服务不启动;如何做组件之间的依赖关系【英文标题】:Service does not start after updating; how to do dependencies between components 【发布时间】:2013-07-31 13:11:06 【问题描述】:我们有一个安装程序,它可以安装 Windows 服务和一些文件。有时当我们使用新安装更新安装时(通过简单地安装新包;小升级、产品版本更改、产品 ID 不变),服务无法启动。这是因为安装文件夹中缺少一些服务启动时需要的文件。
目前我们只有<Feature />
,也只有一个<ComponentGroup />
。 <ComponentGroup />
本身包含服务并包含一些其他组件,其中包含文件。看起来是这样的(空属性是占位符,实际上是填充的):
<Component Id="" Guid="" Directory="">
<File Source="" Id="" />
<File Source="" Id="" />
</Component>
<Component Id="" Guid="" Directory="">
<File Source="" Id="" />
<File Source="" Id="" />
</Component>
<Component Id="" Guid="" Directory="">
<File Source="" Id="" />
<File Source="" Id="" />
</Component>
<Component Id="" Guid="" Directory="">
<File Source="" Id="" />
<File Source="" Id="" />
<File Source="" Id="" />
<File Source="" Id="" />
<ServiceInstall Id="ServiceInstaller" Type="ownProcess" Vital="yes" Name="" DisplayName="" Description="" Start="auto" Account="LocalSystem" ErrorControl="ignore" Interactive="no">
<util:ServiceConfig FirstFailureActionType="restart" SecondFailureActionType="restart" ThirdFailureActionType="restart" ResetPeriodInDays="5" />
</ServiceInstall>
<ServiceControl Id="StartService" Start="install" Stop="both" Remove="uninstall" Name="" Wait="yes" />
</Component>
不好的是服务依赖于其他一些组件。
如何指定这些依赖项?还是我需要将所有文件放在包含<ServiceInstall />
的组件中?
谢谢, 约翰内斯
【问题讨论】:
我已经忘记了,我在这里发布了一个关于此的问题 :) 问题与我们的构建过程有关,与 WIX 本身无关。无论如何谢谢你的回复。顺便问一下,我怎样才能将此问题标记为已回答或其他? 我认为可能是这种情况(因为问题太老了)。如果您想将其标记为已回答,我扩展了我的评论并将其发布为答案。谢谢! 【参考方案1】:我怀疑问题是由其他原因引起的。帮助发现真正问题的一个好计划是运行msiexec MyApp.msi /log install.log
并检查生成的日志文件。该日志可以证明文件是否首先安装,并且可以发现另一个问题。
在执行实际安装时的 InstallExecuteSequence 期间,Windows Installer 通过一系列操作安装组件。在磁盘上放置文件的动作称为InstallFiles,启动服务的动作称为StartServices。
除非您告诉它这样做,否则 WiX 会在 InstallFiles 操作之后安排 StartServices 操作,因此在启动服务之前所有文件都应该存在于磁盘上。
【讨论】:
以上是关于更新后服务不启动;如何做组件之间的依赖关系的主要内容,如果未能解决你的问题,请参考以下文章
Oracle:如何循环并查找表之间的依赖/依赖关系,以便为每个表执行插入/更新操作?