更新后服务不启动;如何做组件之间的依赖关系

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>

不好的是服务依赖于其他一些组件。

如何指定这些依赖项?还是我需要将所有文件放在包含&lt;ServiceInstall /&gt; 的组件中?

谢谢, 约翰内斯

【问题讨论】:

我已经忘记了,我在这里发布了一个关于此的问题 :) 问题与我们的构建过程有关,与 WIX 本身无关。无论如何谢谢你的回复。顺便问一下,我怎样才能将此问题标记为已回答或其他? 我认为可能是这种情况(因为问题太老了)。如果您想将其标记为已回答,我扩展了我的评论并将其发布为答案。谢谢! 【参考方案1】:

我怀疑问题是由其他原因引起的。帮助发现真正问题的一个好计划是运行msiexec MyApp.msi /log install.log 并检查生成的日志文件。该日志可以证明文件是否首先安装,并且可以发现另一个问题。

在执行实际安装时的 InstallExecuteSequence 期间,Windows Installer 通过一系列操作安装组件。在磁盘上放置文件的动作称为InstallFiles,启动服务的动作称为StartServices。

除非您告诉它这样做,否则 WiX 会在 InstallFiles 操作之后安排 StartServices 操作,因此在启动服务之前所有文件都应该存在于磁盘上。

【讨论】:

以上是关于更新后服务不启动;如何做组件之间的依赖关系的主要内容,如果未能解决你的问题,请参考以下文章

在 Windows 服务启动之间创建依赖关系

Oracle:如何循环并查找表之间的依赖/依赖关系,以便为每个表执行插入/更新操作?

如何管理 Gradle 模块之间的依赖关系?

linux安装rpm包时有的有依赖关系,如何强制安装?

在 SDK/ADT 更新后 Android 库依赖关系被破坏

如何使用 docker-compose 在 docker 容器之间建立依赖关系 [重复]