0

我正在使用 WiX 的项目参考功能使用 Heat 自动收获一个项目。这特别有用,因为 WiX 安装程序是在本地和 TFS2010 构建服务器上构建的,当它在构建服务器上构建时,输出被重定向到不同的位置,这意味着如果我不自动收获项目,它会得到试图为最近编译的项目引用正确的位置非常混乱。

我有以下 WiX“代码”来安装和启动服务:

<ServiceInstall Id="MyService"
 Type="ownProcess"
 Vital="yes"
 Name="MyServiceName"
 DisplayName="My Service Display Name"
 Description="My Service Description"
 Start="auto"
 Account="[SERVICEACCOUNT]"
 Password="[SERVICEPASSWORD]"
 ErrorControl="ignore"
 Interactive="no" />
<ServiceControl Id="StartService" Name="MyServiceName" Start="install" Wait="no" />
<ServiceControl Id="StopService" Name="MyServiceName" Stop="both" Wait="yes" Remove="uninstall" />

到目前为止,一切都很好......当安装程序尝试安装和启动 Windows 服务但显示“服务'MyServiceName'(MyServiceName) 无法启动。验证您是否有足够的权限来启动系统服务”时,我遇到了问题。如果我选择“忽略”按钮,则安装“成功”完成,但是当我检查我机器上安装的服务时,新服务没有列出。

根据我的在线调查,我认为问题在于该服务实际上没有正确安装,因为我需要将 KeyPath 设置为应该作为服务运行的可执行文件,但是由于我正在使用 Heat 收集文件,所以我找不到这样做的方法...除非我创建一个自定义操作,该操作将为我安装服务,允许我在安装所有文件后指定可执行文件名称...但这听起来不像应该是正确的解决方案...

有没有人有任何建议或者他们遇到过同样的问题并提出解决方案?

谢谢

2010 年 7 月 10 日更新:在我的 WiX 脚本中,我有以下内容:

<Directory Id="INSTALLLOCATION" Name="Dolphin Transfer Service Server" ComponentGuidGenerationSeed="AF89976D-CD66-4b94-911B-1D27F969BC14">
    <Component Id="ServiceComponent" Guid="F55415F7-803C-4a83-A677-C0F882699374">
        <ServiceInstall Id="DolphinTransferService" Type="ownProcess"...

我收获的文件的目标目录是 INSTALLLOCATION 目录。

查看使用 Orca 的 msi,我可以看到我的 ServiceComponent 以及为每个收获文件生成的所有组件。查看文件表,没有与此组件关联的文件(因为它们为每个文件生成了一个组件......)。查看 ServiceInstall 表,它尝试安装的组件是 ServiceComponent。

所以我认为我需要以某种方式让 ServiceInstall 元素位于为服务 exe 生成的组件内,以便将此组件安装为服务而不是空的“ServiceComponent”组件?但是由于这个组件是在构建时由热量生成的,所以我没有设法取得任何进一步的进展......

4

1 回答 1

0

heat 的输出是一个 WXS 创作,每个组件一个文件。这是默认行为,无法使用标准热开关进行更改。这样做是为了自然地遵循组件规则。

如果组件包含单个文件,则此文件自动成为 KeyPath。因此,如果您不转换热量的输出并遵守“一个组件 - 一个文件”的规则,这一定不是您得到错误的原因。

我建议调查详细日志,看看它是否包含您面临的失败的更详细描述。

于 2010-10-06T19:11:41.603 回答