在自动收集项目时设置keypath

时间:2010-10-06 16:33:06

标签: visual-studio-2010 wix tfs2010 heat votive

我正在使用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设置为应该作为服务运行的可执行文件,但是因为我正在使用加热,我找不到办法做到这一点......除非我创建一个自定义操作,它将为我安装服务,允许我在安装所有文件后指定可执行文件名称...但这不是听起来应该是正确的解决方案...

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

由于

更新07/10/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以及每个已获取文件的所有生成组件。查看File表,没有与该组件关联的文件(因为它们为每个文件生成了一个组件......)。查看ServiceInstall表,它尝试安装的组件是ServiceComponent。

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

1 个答案:

答案 0 :(得分:0)

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

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

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