Installation WiX:将服务安装为LocalService

Installation WiX:将服务安装为LocalService,installation,wix,windows-installer,wix3,Installation,Wix,Windows Installer,Wix3,我正试图通过WIX3.0安装我的应用程序。确切的代码是: <File Id="ServiceComponentMain" Name="$(var.myProgramService.TargetFileName)" Source="$(var.myProgramService.TargetPath)" DiskId="1" Vital="yes"/> <!-- service will need to be installed under Local Service -->

我正试图通过WIX3.0安装我的应用程序。确切的代码是:

<File Id="ServiceComponentMain" Name="$(var.myProgramService.TargetFileName)" Source="$(var.myProgramService.TargetPath)" DiskId="1" Vital="yes"/>

<!-- service will need to be installed under Local Service -->
<ServiceInstall
                        Id="MyProgramServiceInstaller"
                        Type="ownProcess"
                        Vital="yes"
                        Name="MyProgramAddon"
                        DisplayName="[removed]"
                        Description="[removed]"
                        Start="auto"
                        Account="LocalService"
                        ErrorControl="ignore"
                        Interactive="no"/>
<ServiceControl Id="StartDDService" Name="MyProgramServiceInstaller" Start="install" Wait="no" />
<ServiceControl Id="StopDDService" Name="MyProgramServiceInstaller" Stop="both" Wait="yes" Remove="uninstall" />


问题是,由于某种原因,LocalService在“安装服务”步骤失败,如果我将其更改为“LocalSystem”,则安装程序在尝试启动服务时超时

该服务可以手动启动,也可以在系统启动时启动,而且无论出于何种目的,它都工作得很好。我听说让服务在LocalService下正常工作存在一些问题,但谷歌并没有真正起到帮助作用,因为每个人的回答都是“让它在kthx下工作”

只是希望在安装过程中设置并启动此服务,仅此而已。有什么帮助吗?谢谢

你试过

NT AUTHORITY\LocalService 
根据这个

。。。但是帐户名必须是NT 调用时使用AUTHORITY\LocalService CreateService,而不考虑 区域设置,或可能出现意外结果 发生

参考:

ServiceControl表的MSI文档声明“Name”是服务的字符串名称。在代码snipet中,ServiceControl“Name”设置为ServiceInstall的“ID”,而不是其“Name”。因此,您的ServiceControl元素应为:

<ServiceControl Id="StartDDService" Name="MyProgramAddon" Start="install" Wait="no" />
<ServiceControl Id="StopDDService" Name="MyProgramAddon" Stop="both" Wait="yes" Remove="uninstall" />

也有同样的问题,但使用指定的帐户,对此感到厌倦,并创建了CA,以便在安装完成后启动服务。只是不要费心尝试从MSI开始,只要把它留给CA,除非你从某处得到一些质量信息


顺便说一句,使用LocalSystem和手动启动的服务工作正常。从未使用过任何其他变体。

请注意,在ServiceInstall元素的文档中,它是关于帐户属性的,即“启动服务的帐户。仅当ServiceType为ownProcess时才有效。”。在您的示例中,您没有指定ownProcess服务类型,这可能是问题所在。

我花了一段时间研究这个问题,发现这是因为我在组件上设置了keypath属性,而不是在文件上。我的wix文件现在看起来像:

<Component Id="comp_WF_HOST_18" DiskId="1" KeyPath="no" Guid="3343967A-7DF8-4464-90CA-7126C555A254">
    <File Id="file_WF_HOST_18" Checksum="yes" Source="C:\Projects\GouldTechnology\Infrastructure\WorkflowHost\WorkflowHost\bin\Release\WorkflowHost.exe" KeyPath="yes"/>

      <ServiceInstall
                 Id="workflowHostInstaller"
                 Type="ownProcess"
                 Vital="yes"
                 Name="WorkflowHost"
                 DisplayName="Workflow Host"
                 Start="demand"
                 Account="[WORKFLOW_HOST_USER_ACCOUNT]"
                 Password="[WORKFLOW_HOST_USER_PASSWORD]"
                 ErrorControl="critical"
                 Interactive="no"/>
    <ServiceControl Id="StartWFService" Name="workflowHostInstaller" Start="install"  Stop="both" Remove="both" Wait="no" />

</Component>


现在我只需要解决如何给它正确的权限…

我也有同样的问题。原来我在
中有一个输入错误,我们只有在无法安装服务的Windows XP机器上才会出现同样的问题。最后,我们发现在XP上,WiX文件中的名称设置被忽略,而是使用C#代码中设置的服务名称。我们碰巧在代码中有一个包含空格的名字,即。E“诸如此类的服务”,当它被设置为与Windows7上使用的WiX文件相同的名称时,它工作得很好

我将回应aristippus303的建议:不要尝试使用Windows Installer启动服务,也不要设置任何帐户,只需在安装过程中接受LocalSystem的默认设置即可。尝试做任何其他事情都太麻烦了。Windows Installer会等待服务指示它已启动,并且可能会出现太多问题,例如权限和权限、防火墙设置以及缺少的文件等,因此Windows Installer最终会被冻结或因错误而终止,并且您的安装失败


您要做的是在文档中指定用户应手动更改服务的帐户(如有必要),并在安装完成后手动启动服务,并对此时出现的任何问题进行故障排除。或者告诉用户重新启动,这样如果您确信不会出现问题,自动启动选项将启动该服务。

这里是另一个本地系统服务无法安装的情况,错误是1923:如果您已经安装了另一个具有相同显示名(但不同的内部服务名、路径等)的服务。我刚刚遇到这种情况。

请确保在安装时关闭services.msc窗口

我想我已经尝试过了,但作为“本地服务”。将尝试不使用。使用Account=“NT AUTHORITY\LocalService”,我得到以下信息:“错误1923。无法安装服务‘我的程序长名称’(MyProgramAddon)。请验证您是否有足够的权限安装系统服务。”问题是,安装程序在Windows XP下以管理员身份运行。我感到困惑:-(我在Windows 8上执行此操作。如果没有NT AUTHORITY\,它会立即失败。当我使用NT AUTHORITY\LocalService时,需要几分钟,我看到服务在services.msc管理单元中越来越远(它的状态为开始),但它仍然失败。有什么想法吗?对我来说很有帮助。嗨,它确实在OwnProcess下运行。我手工重新键入了代码,我想我忘记了那个指令。不过,谢谢!顺便说一下,另一个问题是,如果你的服务是.Net程序,并且你正在将程序集安装到GAC,那么你就不能在Windows中启动该服务安装程序,因为在尝试启动服务时GAC尚未填充。您可能需要检查此线程(请参阅最后一篇文章)看起来你需要在文件上设置关键路径,并把文件放在同一个组件中。@ DunCalpSpist:自定义动作,一个Windows安装程序作业的附加工具。以前他们必须用C++编写,但是现在应该可以用C语言写了。哦,谢谢。是的,我已经为VS2010写了一些自定义动作。安装程序,一旦你学会了这些技巧,它们就会工作得很好。对不起,我只是没想到把它变成首字母缩写。谢谢。在我的.exe上使用KeyPath=“yes”和“no”在其他可执行文件上修复了该问题!这是一个巨大的帮助!哦,看在皮特的份上。谢谢。真的吗?我需要休息一下。事实上,即使任务管理器的“服务”选项卡为同一服务器上的其他用户打开,这也足以阻止安装。