【问题标题】:WIX-Installer ServiceControl "sufficient privileges" errorWIX-Installer ServiceControl“足够的权限”错误
【发布时间】:2015-08-16 14:10:56
【问题描述】:

Visual Studio 2015 RC 蜡 v3.10.0.1726

我正在为 Windows 服务创建安装程序。我已经使用 InstallUtil 测试了该服务,它运行良好。不幸的是,我在使用 wix 时遇到了一些问题,这是确切的错误 -

“服务‘服务名称’启动失败。请确认您有足够的权限来启动系统服务。”

现在我已将问题范围缩小到通过 WIX 启动服务。如果我放弃 ServiceControl 标记并使用 services.msc 手动启动它,它工作正常。

从其他问题看来,此错误是一般的 catch 错误,并且会在多种情况下发生。如果您的服务依赖于安装到 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 中尝试了各种不同的属性,最近我将它们全部删除以尝试使其尽可能简单。

如果有人有任何见解,那就太好了!

【问题讨论】:

  • 您能否在启用详细日志记录的情况下运行安装程序:msiexec /l*v Install.log /i YourInstallPackage.msi。在日志文件“Install.log”中搜索尝试服务控制的部分。可能有更多关于错误的信息。

标签: c# windows-services wix installation visual-studio-2015


【解决方案1】:

正确,这是一个一般性错误。您必须分析您的服务以了解它为什么无法启动。

GAC 只是一种情况。在这种情况下,这是因为 MSI 直到 StartServices 之后才将程序集发布到 GAC。导致缺少依赖项和错误的经典竞争条件。

在消息框仍然打开的情况下,从控制台运行 EXE。你有错误吗?您的应用程序日志中是否有任何错误?找出服务无法修复的原因,解决它并重试。

【讨论】:

  • 我猜我的调试技能还达不到标准。谢谢,这与详细的日志记录相结合应该可以让我破坏的下一个东西更容易解除。
  • 请参阅下方菲尔的回答。可能就这么简单! :)
【解决方案2】:

问题似乎是您已经安装了一个名为 ServiceName.exe 的服务,并且您正试图启动一个名为 ServiceName 的服务。名称值需要匹配。

【讨论】:

  • 嘿,是的,这样就可以了。 :) 我没有仔细看 src。很多时候,这些示例都被删改了,可能是一个错字,而真正的来源很好。
  • 是的,我删除了我所有的公司信息,以免他们看起来不专业,并且忘记了 ServiceName 上的 .exe,我的错。无论如何,如上所述,问题已解决,谢谢大家的帮助。
【解决方案3】:

对我来说,错误是由于ServiceInstall 标记中的Name 属性与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";
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-24
    • 1970-01-01
    • 2019-01-17
    相关资源
    最近更新 更多