0

我们有一个安装程序,它确实安装了 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 />?

谢谢,约翰内斯

4

1 回答 1

0

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

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

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

于 2013-09-11T14:34:53.227 回答