我正在尝试为Windows服务创建一个安装程序,我不知道它为什么会失败。
这是我定义服务相关部分的片段:
<ComponentGroup Id="ServiceComponents" Directory="InstallDirectory">
<Component Id="ThingService" Guid="1F4D7F24-BC66-4E7A-AC33-A7E2133FC5B8" KeyPath="yes">
<ServiceInstall Id="ThingServiceInstaller"
Type="ownProcess"
Name="ThingService"
DisplayName="Thing"
Description="Does Thing."
Start="auto"
ErrorControl="normal"
Vital="yes" />
<ServiceControl Id="StartService"
Start="install"
Stop="both"
Remove="uninstall"
Name="ThingService"
Wait="yes" />
</Component>
</ComponentGroup>
这是最后运行的部分 - 文件全部部署在之前,我可以看到它们到达了应有的位置。当它启动服务时,我收到以下错误:
服务'ThingService'(ThingService)无法启动。验证您是否有足够的priveleges来启动系统服务。
但是,我根本没有看到服务列表中的服务,所以我不知道它甚至试图启动它。我觉得我错过了某种指向Thing.exe
的指针,但我看到的例子似乎也没有。
以下是详细日志中似乎相关的部分:
1:
MSI(50:F8)[16:14:38:880]:组件:ThingService;安装:缺席;要求:本地;行动:本地
2:
MSI(s)(50:F8)[16:14:40:736]:采取行动:停止服务
MSI(50:F8)[16:14:40:736]:注意:1:2205 2:3:ActionText
动作16:14:40:停止服务。停止服务
行动开始16:14:40:停止服务。
StopServices:服务:停止服务
动作结束16:14:40:StopServices。返回值1。
MSI(50:F8)[16:14:40:740]:采取行动:删除服务
MSI(50:F8)[16:14:40:740]:注意:1:2205 2:3:ActionText
动作16:14:40:DeleteServices。删除服务
动作开始16:14:40:DeleteServices。
动作结束16:14:40:DeleteServices。返回值1。
MSI(s)(50:F8)[16:14:40:747]:采取行动:RemoveRegistryValues
MSI(50:F8)[16:14:40:747]:注意:1:2205 2:3:ActionText
动作16:14:40:RemoveRegistryValues。删除系统注册表值
动作开始16:14:40:RemoveRegistryValues。
行动结束16:14:40:RemoveRegistryValues。返回值1。
3:
MSI(50:F8)[16:14:40:944]:采取行动:安装服务
MSI(50:F8)[16:14:40:944]:注意:1:2205 2:3:ActionText
动作16:14:40:InstallServices。安装新服务
行动开始16:14:40:InstallServices。
动作结束16:14:40:InstallServices。返回值1。
MSI(50:F8)[16:14:40:945]:采取行动:StartServices
MSI(50:F8)[16:14:40:945]:注意:1:2205 2:3:ActionText
动作16:14:40:StartServices。启动服务
动作开始16:14:40:StartServices。
StartServices:服务:启动服务
动作结束16:14:40:StartServices。返回值1。
4:
MSI(s:50:F8)[16:14:40:994]:执行op:ActionStart(Name = StopServices,Description = Stopping services,Template = Service:[1])
动作16:14:40:停止服务。停止服务
MSI(50:F8)[16:14:40:996]:执行操作:ProgressTotal(总计= 1,类型= 1,字节等效= 1300000)
MSI(50:F8)[16:14:40:996]:执行op:ServiceControl(,Name = ThingService,Action = 2,Wait = 1,)
MSI(s)(50:F8)[16:14:40:996]:执行op:ActionStart(Name = CreateFolders,Description = Creating folders,Template = Folder:[1])
5:
MSI(50:F8)[16:14:41:817]:执行op:ActionStart(Name = StartServices,Description = Starting services,Template = Service:[1])
动作16:14:41:StartServices。启动服务
MSI(50:F8)[16:14:41:817]:执行操作:ProgressTotal(总计= 1,类型= 1,字节等效= 1300000)
MSI(s:50:F8)[16:14:41:817]:执行op:ServiceControl(,Name = ThingService,Action = 1,Wait = 1,)
StartServices:服务:ThingService
错误1920.服务'ThingService'(ThingService)无法启动。验证您是否具有足够的权限来启动系统服务。
EDIT1 :看起来问题在于将ServiceInstall / ServiceControl拆分为自己的组件,因为如果我将它们放入与定义文件的位置相同的组件中,它就会起作用。
答案 0 :(得分:0)
ServiceInstall
必须与服务可执行文件位于同一Component
,因为
Windows Installer使用Component表的外键定义ServiceInstall表,而不是可执行文件的路径(请参阅http://msdn.microsoft.com/en-us/library/aa371637(VS.85).aspx)。
参考here。