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

时间:2013-07-31 13:11:06

标签: wix wix3.7

我们有一个安装程序可以安装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 />

的组件中

谢谢, 约翰内斯

1 个答案:

答案 0 :(得分:0)

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

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

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