安装Windows服务的问题

时间:2014-05-15 20:34:29

标签: wix

我正在尝试为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拆分为自己的组件,因为如果我将它们放入与定义文件的位置相同的组件中,它就会起作用。

1 个答案:

答案 0 :(得分:0)

ServiceInstall必须与服务可执行文件位于同一Component,因为

  

Windows Installer使用Component表的外键定义ServiceInstall表,而不是可执行文件的路径(请参阅http://msdn.microsoft.com/en-us/library/aa371637(VS.85).aspx)。

参考here