从Asp.net Web应用程序执行Windows服务(* .exe)

时间:2019-01-22 15:50:23

标签: c# asp.net windows-services

我已经创建Windows服务并在系统中安装了.exe文件。我可以通过Windows 10上的Service控件运行此服务。

我正在从ASP.NET Web应用程序运行相同的服务。服务已启动,但我想在从Web应用程序调用时调用protected override void OnCustomCommand(int command)方法。

我遇到

错误
An exception of type 'System.InvalidOperationException' occurred in System.ServiceProcess.dll but was not handled in user code

Additional information: Cannot control ServiceName service on computer '.'.

写在网页上以调用Windows服务的代码为-

            ServiceController sc = new ServiceController("ServiceName");
            if (sc.Status != ServiceControllerStatus.Running && sc.Status != ServiceControllerStatus.StopPending)
            {
                TimeSpan timeout = TimeSpan.FromMilliseconds(60000);
                sc.Start();
                sc.ExecuteCommand(CommandId);
                sc.WaitForStatus(ServiceControllerStatus.Running, timeout);
            }

任何人都可以帮助找到此问题的原因吗?

1 个答案:

答案 0 :(得分:1)

运行网页的代码没有管理员特权来控制该计算机上的服务。

您必须将应用程序池配置为在管理帐户下运行。从安全角度来看,这可能不是一个好主意。

如果您不想以管理权限运行Web应用程序,则可以考虑在Windows服务中托管自己的侦听器,该侦听器仅需要用户名/密码或根本不需要身份验证,因为您选择的变体仅可用于localhost。 WCF可能是个不错的选择,或者如果您对此更熟悉的话,可能是ASP.NET。