.net ServiceController-无法打开服务“;“服务名称”;在机器中'';

.net ServiceController-无法打开服务“;“服务名称”;在机器中'';,.net,windows-services,.net,Windows Services,我正在尝试通过WinForms应用程序访问windows服务(也是由我创建的),使用: 服务返回OK,我可以通过myservice.status查看状态 但当我尝试启动(或停止)它时,它返回错误: 无法在计算机“”中打开服务MyService 我是管理员,服务进程正在作为NetworkService运行 我是.net和windows应用程序的新手,似乎无法进一步调试它。您确定您使用的是服务名称而不是显示名称吗 再次检查您是否是该框的本地管理员 服务是否在本地计算机上运行?我不知道你为什么会看到主

我正在尝试通过WinForms应用程序访问windows服务(也是由我创建的),使用:

服务返回OK,我可以通过
myservice.status
查看状态

但当我尝试启动(或停止)它时,它返回错误:

无法在计算机“”中打开服务MyService

我是管理员,服务进程正在作为NetworkService运行


我是.net和windows应用程序的新手,似乎无法进一步调试它。

您确定您使用的是服务名称而不是显示名称吗

再次检查您是否是该框的本地管理员

服务是否在本地计算机上运行?我不知道你为什么会看到主持人的名字

编辑:

我在网上了解到,如果
测试服务
不是有效的服务名称,则以下代码会引发
InvalidOperationException

没有表明它会抛出异常,所以我猜您需要使用服务名称。之后出现的任何异常实际上都是一个真正的错误


希望这更清楚。

我终于能够通过在app.manifest(project->new item->application manifest)中设置执行级别来解决这个问题


现在,控制应用程序需要管理员权限,因此可以毫无问题地启动/停止服务

尽管如此,我相信我可以通过代码使用模拟或以某种方式降低服务运行级别来实现这一点

在启动该应用程序之前,我必须对此进行审查,然后将我的发现发布在这里

感谢Drew在整个调试过程中提供的指导


关于

我想我用对了,这是“MySMS服务”。服务属性(“MySMS_服务”)中的实际ServiceName在服务状态上出错,因此我认为“MySMS服务”是正确的,因为返回了状态“Stopped”。是,我的用户帐户具有管理员权限。是的,服务正在本地计算机上运行,我没有设置MachineName属性,因此它应该默认为本地计算机。我已更新了答案。我相信您需要使用服务名称,而不是显示名称。好的,为了确保我使用了ServiceController.GetServices()并在所有服务中循环-serviceName实际上是“MySMS服务”。-我可以获取它的状态和显示名等,但只有当我尝试启动或停止时,它才会返回“无法在计算机中打开服务MySMS服务”。“您看到的异常类型是什么?另外,您正在运行的代码正在使用哪些凭据?您确定它正在使用您的凭据吗?还有一个问题--如果您使用
services.mmc
sc.exe
,它会启动吗?
service = new System.ServiceProcess.ServiceController("MyService")
var sc = new ServiceController("Unknown Service");
string name = sc.DisplayName;
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />