首页 > 解决方案 > 如何在.Net core 3.1 C#中使用ProcessID向多个浏览器广播本机消息

问题描述

[.Net core 3.1 C#] [这组代码只发送消息当前进程]

    string sendingData = JsonConvert.SerializeObject(data, utils.GetJsonSerializerSettingCamelcase());
    byte[] bytes = System.Text.Encoding.UTF8.GetBytes(sendingData.ToString());
    Stream stdout = Console.OpenStandardOutput();
    stdout.WriteByte((byte)((bytes.Length >> 0) & 0xFF));
    stdout.WriteByte((byte)((bytes.Length >> 8) & 0xFF));
    stdout.WriteByte((byte)((bytes.Length >> 16) & 0xFF));
    stdout.WriteByte((byte)((bytes.Length >> 24) & 0xFF));
    stdout.Write(bytes, 0, bytes.Length);
    stdout.Flush();

我使用 c# 在 .Net core 3.1 中构建了一个控制台应用程序,并为此应用程序创建了 .EXE。它通过在 Edge/Chrome/Firefox 中加载的扩展使用。当浏览器发起通信时,此代码工作正常。现在我想向所有浏览器扩展发送消息,但它只发送当前进程。我获得了所有进程 ID Process[] processes = Process.GetProcessesByName("ConsoleApp"); ,但我无法向所有进程发送消息。

Process[] utilityProcess =  Process.GetProcessesByName("ConsoleApp");            
        foreach(Process p in utilityProcess)
        {
            
            
            logger.Log(LogLevel.Information, $"Process ID {p.Id.ToString()} Process Name {p.ProcessName}");
            logger.Log(LogLevel.Information, $"SendMessage:{JsonConvert.SerializeObject(data)}");
            string sendingData = JsonConvert.SerializeObject(data, utils.GetJsonSerializerSettingsCamelCase());
            byte[] bytes = System.Text.Encoding.UTF8.GetBytes(sendingData.ToString());
            
            Stream stdout = Console.OpenStandardOutput();
            stdout.WriteByte((byte)((bytes.Length >> 0) & 0xFF));
            stdout.WriteByte((byte)((bytes.Length >> 8) & 0xFF));
            stdout.WriteByte((byte)((bytes.Length >> 16) & 0xFF));
            stdout.WriteByte((byte)((bytes.Length >> 24) & 0xFF));
            stdout.Write(bytes, 0, bytes.Length);
            stdout.Flush();
            
        }

在上面的代码中Stream stdout = Console.OpenStandardOutput();保存当前进程的引用。但我想 Stream stdout = Console.OpenStandardOutput();保留 p 过程的参考。有没有办法做到这一点?

标签: c#.net.net-core

解决方案


推荐阅读