16

我正在尝试通过 WiX 3.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”。

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

4

10 回答 10

15

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

于 2012-11-01T08:06:12.260 回答
10

你有没有尝试过 ...

NT AUTHORITY\LocalService 

根据这个文档...

...但是当您调用 CreateService 时,帐户的名称必须是 NT AUTHORITY\LocalService,无论语言环境如何,否则可能会出现意外结果。

于 2009-07-11T20:53:20.547 回答
8

参考:ServiceControl 表

ServiceControl Table 的 MSI 文档指出“名称”是服务的字符串名称。在您的代码片段中,您的 ServiceControl“名称”设置为 ServiceInstall 的“ID”,而不是其“名称”。因此,您的 ServiceControl 元素应为:

<ServiceControl Id="StartDDService" Name="MyProgramAddon" Start="install" Wait="no" />
<ServiceControl Id="StopDDService" Name="MyProgramAddon" Stop="both" Wait="yes" Remove="uninstall" />
于 2009-07-24T19:21:42.527 回答
7

这是本地系统服务安装失败并出现错误 1923 的另一种情况:如果您已经使用相同的 DisplayName(但不同的内部服务名称、路径等)安装了另一个服务。我刚遇到这种情况。

于 2011-05-21T22:15:22.857 回答
3

我花了一段时间研究这个问题,发现这是因为我在组件上设置了 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>

现在我只需要弄清楚如何给它正确的权限......

于 2010-01-15T11:23:28.063 回答
3

我有同样的问题。事实证明,我在创建它时与我在服务项目中指定的服务名称不匹配的<ServiceControl Id="StartService" Name="MyServiceName"地方有一个错字。Name

这也是我的服务没有卸载的问题。

于 2010-05-25T22:16:58.150 回答
2

有同样的问题,但使用指定的帐户,厌倦了它并创建了一个 CA 以在安装完成后启动服务。只是不要费心尝试使用 MSI 启动它,只需将其留给 CA,除非您从某个地方获得一些质量信息。

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

于 2009-07-26T15:28:05.293 回答
2

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

您要做的是在文档中指定用户应手动更改服务帐户(如有必要)并在安装完成后手动启动服务,并解决此时出现的任何问题。或者只是告诉用户重新启动,以便如果您相当确定不会有问题,自动启动选项将启动服务。

于 2011-02-04T14:03:23.540 回答
1

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

于 2009-11-10T17:02:23.153 回答
1

我们只在 Windows XP 机器上出现了同样的问题,无法安装该服务。最后,我们发现在 XP 上,WiX 文件中的名称设置被忽略,而是使用 C# 代码中设置的服务名称。我们碰巧在代码中有一个包含空格的名称,即“Blah Blah Service”,当它设置为与 Windows 7 上使用的 WiX 文件相同的名称时,它运行良好。

于 2010-10-13T13:51:18.233 回答