【问题标题】:Starting a service programmatically以编程方式启动服务
【发布时间】:2011-10-24 12:30:10
【问题描述】:

我正在努力从另一个应用程序启动服务。

好的,首先,这是我的出发点: 我将一个常用的服务包装到我自己的类中,该类继承自 ServiceBase。 此外,我得到了一个 ProjectInstaller 实例,它继承自 System.Configuration.Install.Installer 并负责以正确的方式在系统上安装我的服务。

它有这些参数:

serviceInstaller1.ServiceName = "NameOfService";
serviceInstaller1.StartType = System.ServiceProcess.ServiceStartMode.Manual;
serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalService;

此 ProjectInstaller 输出是通过通常的 C# .NET 安装项目安装的。

该服务显示在系统控制 -> 管理 -> 服务内的 GUI 服务列表中。但我想知道的是,如果我使用 cmd.exe 并键入“net start”,该服务不会出现在服务列表中。

到目前为止,这就是我所拥有的。 现在我想从另一个应用程序启动我的服务。此应用程序继承自

ServiceController

如果我现在想打电话给

Start()

方法,我得到一个错误,告诉我无法打开本地机器的服务。

我使用与上述相同的服务名称。我对此感到困惑,因为我认为该服务已通过我的安装程序正确安装。 还是我的应用程序(以及 cmd.exe)没有足够的权限来访问该服务?

【问题讨论】:

  • 应用运行的账号是否有权限启动服务?
  • 它是目前系统上唯一拥有管理员权限的帐号,我猜它是允许启动服务的,是的。使用同一个帐户安装和启动服务。
  • 可以手动启动服务吗?
  • 是的,但只能从用户界面,而不是从命令行。从命令行启动服务遇到错误,告诉我访问被拒绝。
  • 使用管理员权限显式启动 cmd.exe 工作正常。但我希望有一种方法可以避免启动服务需要管理权限?!

标签: c# .net c#-4.0 windows-services


【解决方案1】:

我在 stackoverflow 上找到了这篇文章。 我认为这里发布的这个答案也可以在这里应用。

请看下面的链接 ServiceController permissions in Windows 7

【讨论】:

    【解决方案2】:

    我之前遇到过这个问题,对我来说也是基于权限的。我希望那个错误信息更清楚一点。

    我建议您看一下这篇 SO 文章:C#.NET: Acquire administrator rights? - 看起来有一个关于升级到答案中提供的管理权限的好教程。

    【讨论】:

    • 感谢您的帖子!我在 stackoverflow 上提出的另一个问题中找到了答案
    猜你喜欢
    • 2011-10-03
    • 1970-01-01
    • 2018-10-07
    • 2018-10-14
    • 1970-01-01
    • 2019-07-15
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    相关资源
    最近更新 更多