C# ExecuteCommand servicecontroller-无法对服务执行命令
我正在使用service controller executecommand函数,如下所示:C# ExecuteCommand servicecontroller-无法对服务执行命令,c#,servicecontroller,C#,Servicecontroller,我正在使用service controller executecommand函数,如下所示: ServiceController serviceController = new ServiceController("a Service", Environment.MachineName); serviceController.ExecuteCommand(129); 在服务控制器中: protected
ServiceController serviceController = new ServiceController("a Service",
Environment.MachineName);
serviceController.ExecuteCommand(129);
在服务控制器中:
protected override void OnCustomCommand(int command)
{
base.OnCustomCommand(command);
// Depending on the integer passed in, the appropriate method is called.
switch (command)
{
case 129:
RestartSpooler();
break;
case 131:
InstallPrinter();
break;
case 132:
DeletePrinter();
break;
}
}
但是,尽管从调用代码中调用了任何命令(代码命中行,然后跳过,没有异常),但什么也没有发生。为什么?这是所有在本地机器上,我有完全的管理员权限
谢谢我还没有找到它不起作用的任何理由。 下面是使用自定义命令的windows服务的工作示例
public partial class TestService : ServiceBase
{
public TestService()
{
InitializeComponent();
}
protected override void OnStart(string[] args) { }
protected override void OnStop() { }
protected override void OnCustomCommand(int command)
{
base.OnCustomCommand(command);
switch (command)
{
case 129:
//
break;
case 131:
//
break;
case 132:
//
break;
}
}
}
服务安装程序
[RunInstaller(true)]
public partial class Installer : System.Configuration.Install.Installer
{
public Installer()
{
InitializeComponent();
_processInstaller = new ServiceProcessInstaller();
_processInstaller.Account = ServiceAccount.LocalSystem;
_serviceInstaller = new ServiceInstaller();
_serviceInstaller.StartType = ServiceStartMode.Manual;
_serviceInstaller.ServiceName = "TestService";
Installers.Add(_serviceInstaller);
Installers.Add(_processInstaller);
}
private readonly ServiceInstaller _serviceInstaller;
private readonly ServiceProcessInstaller _processInstaller;
}
服务使用
var serviceController = new ServiceController("TestService", Environment.MachineName);
serviceController.ExecuteCommand(129);
您必须尝试对已停止的服务执行命令。添加如下内容:
if (serviceController1.Status == ServiceControllerStatus.Stopped)
{
serviceController1.Start();
}
serviceController1.ExecuteCommand(192);
它应该按照你描述的方式工作。请检查您是否正确安装了服务,以及您的customCommand操作是否执行了您想要的操作。我知道这已经很晚了,但可能是权限问题。您是否尝试在execute命令调用周围放置一个try/catch,并查看确切的错误显示了什么?@blade33您是否单独测试了您的方法?是的,有一个异常,我已修复,但仍然存在相同的问题。@blade33尝试在您的命令中放入一些简单的测试内容(例如在文件中写入内容)