我已经创建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);
}
任何人都可以帮助找到此问题的原因吗?
答案 0 :(得分:1)
运行网页的代码没有管理员特权来控制该计算机上的服务。
您必须将应用程序池配置为在管理帐户下运行。从安全角度来看,这可能不是一个好主意。
如果您不想以管理权限运行Web应用程序,则可以考虑在Windows服务中托管自己的侦听器,该侦听器仅需要用户名/密码或根本不需要身份验证,因为您选择的变体仅可用于localhost。 WCF可能是个不错的选择,或者如果您对此更熟悉的话,可能是ASP.NET。