我正在使用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”零件?但是由于这个组件是在构建时通过加热生成的,所以我没有取得任何进一步的进展......
答案 0 :(得分:0)
热量输出是WXS创作,每个组件只有一个文件。这是默认行为,无法使用标准热开关进行更改。这样做是为了原生地遵循组件规则。
如果组件包含单个文件,则此文件自动为KeyPath。因此,如果你不转换热量输出并保持规则“一个组件 - 一个文件”,这不一定是你得到错误的原因。
我建议调查详细日志,看看它是否包含您所面临失败的更详细说明。