【问题标题】:How to stop or start Windows Service in C# mvc?如何在 C# mvc 中停止或启动 Windows 服务?
【发布时间】:2016-04-29 10:39:59
【问题描述】:

我试过了 System.ServiceProcess.ServiceController System.Diagnostics.Process;

在我的 Web 表单中控制 Windows 服务。 使用System.ServiceProcess.ServiceController,我收到拒绝访问异常。

System.Diagnostics.Process 我什么也得不到。如何使用我的 Web 表单启动/停止 Windows 服务,知道吗?

【问题讨论】:

  • 要控制服务,您必须以提升的权限运行。默认情况下,Web 应用程序不会这样做。
  • 我怎样才能获得这些权限?
  • 如果我记得是通过将应用程序池标识设置为系统(或计划更好的用户级别)。我
  • 对于所有建议以具有管理权限的用户身份运行应用程序池的人:不要这样做。

标签: c# asp.net-mvc servicecontroller


【解决方案1】:

以下是要完成的重点:

1 您需要添加 应用程序中的 System.ServiceProcess 引用。这个命名空间 持有ServiceController类来访问窗口服务。

2 你需要在你之前检查窗口服务的状态 明确启动或停止它。

3 默认情况下,IIS 应用程序在 ASP.NET 帐户下运行 没有窗口服务的访问权限。非常非常 解决方案的重要部分是:模仿。你需要 使用用户凭据模拟应用程序/部分代码 具有访问窗口的适当权限和权限 服务。

请参阅来自asp.net 的此博客条目 还有看看这个https://stackoverflow.com/a/17497084/1641556

【讨论】:

  • 此解决方案需要在您的站点上进行 Windows 身份验证。如果没问题,这是一个不错且安全的解决方案。
  • 现场如何实现windows认证?你能解释一下吗?
  • @CodeCaster 我正在搜索 4 小时!
  • @AlicanUzun 您是否尝试将应用程序池身份设置为管理员?
【解决方案2】:

Knelis 是正确的,我认为您只需要另一个过程来做到这一点。可能是你自己的windows服务,运行在本地系统下,提供wcf服务来控制windows服务,你的web应用可以调用wcf服务。

【讨论】:

  • 是的,将两者解耦是最好的解决方案。这是安全方面的最佳选择。
  • 根据目标受众,确保将可以启动或停止的服务列入白名单。
  • @AlicanUzun 这是一个很好的解决方案。此示例演示 WCF 服务教程 msdn.microsoft.com/en-us/library/ms733069%28v=vs.110%29.aspx 并将该教程转换为控制 Windows 服务,然后使用您的 Web 应用程序访问该服务
【解决方案3】:

按照以下步骤启动/停止窗口服务:

1) 要访问 windows 服务,您需要在控制器中添加以下命名空间:

using System.ServiceProcess;

如果在添加上述命名空间时出现“找不到命名空间名称‘ServiceController’”的错误,则需要使用“添加引用”进行添加。有关详细信息,请参阅我的博客这里

2) 将以下代码添加到您的控制器:

ServiceController service = new ServiceController("Test Windows Service");
service.Start();

它将启动您的服务。 来源:http://sforsuresh.in/starting-windows-services-c-mvc-4/

【讨论】:

  • 感谢您的回答,但我的问题是使用 System.ServiceProcess 时访问被拒绝异常;和服务控制器。
  • 这不是解决方案,您必须冒充用户。请写下您尝试过的答案,或者您知道它有效
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多