【发布时间】: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