C# 如何从windows服务获取答案

C# 如何从windows服务获取答案,c#,windows-services,servicecontroller,systray,C#,Windows Services,Servicecontroller,Systray,我有一个windows服务和一个NotifyIcon应用程序(系统托盘),它应该与服务通信。应用程序应该发送一个命令,并从服务接收一个端口,用于提供进一步通信的套接字 该服务覆盖OnCustomCommand方法,但我不知道如何向调用程序发送应答 protected override void OnCustomCommand(int command) { switch (command) { case 'p':

我有一个windows服务和一个NotifyIcon应用程序(系统托盘),它应该与服务通信。应用程序应该发送一个命令,并从服务接收一个端口,用于提供进一步通信的套接字

该服务覆盖OnCustomCommand方法,但我不知道如何向调用程序发送应答

    protected override void OnCustomCommand(int command)
    {
        switch (command)
        {
            case 'p':
                // SEND Port number
                break;
            case 's':
                // SEND Service Name
                break;
            case 'n':
                // SEND Notification
                break;
        }

        base.OnCustomCommand(command);
    }
通知图标应用程序

var serviceController=新serviceController(“ATLED服务”);

serviceController.ExecuteCommand((int)'p')

您可以使用不同的方法来实现这一点

  • 您可以使用TCP端口,该端口正在侦听来自服务器的命令回复
  • 您可以在应用程序端使用信号器,并使用该信号器连接服务和应用程序
  • 你们也可以使用共享内存,或者是一个文件,当应用程序中有东西时,该文件由服务创建/写入,或者也可以使用数据库

  • AFAIK自定义命令是“单向”的。如果您的服务应侦听客户端TCP(?)连接,通常只选择一个客户端熟悉的连接。有一个与服务通信的套接字,但应用程序不知道只有服务知道的端口。我认为静态端口不是一个好方法(如果端口被占用会发生什么?)如果端口80被占用,IIS会做什么?如果你真的想加强防御,那么你应该将选择的端口写入一个配置文件,并让应用程序检查该文件。或者,使用。是否有方法获取服务的安装路径,以便我可以调整相对位置来存储文件?请尝试使用此代码获取路径
    AppDomain.CurrentDomain.BaseDirectory