Visual Studio 2015 RC Wix v3.10.0.1726
我正在为Windows服务创建一个安装程序。我已经使用InstallUtil对服务进行了测试,运行正常。不幸的是,我在使用wix时遇到了一些麻烦,这是确切的错误 -
"服务'服务名称'未能启动。验证您是否具有足够的权限来启动系统服务。"
现在我已经缩小了通过WIX启动服务的问题。如果我放弃ServiceControl标记并使用services.msc手动启动它,它可以正常工作。
从其他问题看来,这个错误是一般的捕获错误,并且发生在各种情况下。最受欢迎的是,如果您的服务依赖于安装到GAC(全局程序集缓存)的程序集,我也不清楚。我从不隐瞒地向GAC保存任何内容,我的服务只是调用我写的项目中包含的.cs文件。
非常感谢任何帮助!
<Component Id="ProductComponent7">
<File Source="$(var.ServiceName.TargetPath)" KeyPath="yes" Vital="yes"/>
<ServiceInstall Id="ServiceName.exe"
Account="LocalSystem"
Arguments="-start"
Type="ownProcess"
Name="ServiceName.exe"
DisplayName="ServiceName Service"
Description="sdfg"
Start="auto"
Interactive="yes"
ErrorControl="critical" />
<ServiceControl Id="ServiceControl" Name="ServiceName" Start="install" />
</Component>
我还在ServiceControl中尝试了各种不同的属性,我最近将它们全部删除,以尽量简化它。
如果有人有任何见解,那就太棒了!
答案 0 :(得分:4)
问题似乎是您已经安装了名为ServiceName.exe的服务,并且您正在尝试启动一个名为ServiceName的服务。 Name值需要匹配。
答案 1 :(得分:0)
正确,这是一般错误。您必须对您的服务进行分析,以了解它无法启动的原因。
GAC只是一种情况。在这种情况下,这是因为MSI直到StartServices之后才向GAC发布程序集。一种典型的竞争条件,导致缺少依赖性和错误。
如果消息框仍然显示,请从控制台运行EXE。你有错误吗?您的应用程序日志中是否有任何错误?找出服务无法解决的原因,解决它并重试。
答案 2 :(得分:0)
对我来说,该错误是由于Name
标记中的ServiceInstall
属性具有与ServiceBase child class
InitializeComponent()
方法中指定的名称不同的名称值。
代码更新:
在Product.wxs中:
<ServiceInstall Id="ServiceInstaller"
Type="ownProcess"
Name="MyWindowsService"
DisplayName="$(var.ServiceDisplayName)"
Description="$(var.ServiceDiscription)"
Start="auto"
Account="LocalSystem"
ErrorControl="normal" />
在ServiceBase子类中:
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
this.ServiceName = "MyWindowsService";
}