Native Messaging von der Chrome-Erweiterung zum nativen Host, geschrieben in C #

Ich versuche, eine Nachricht von meiner Chrome-Erweiterung über natives Messaging zu erhalten. Daspopup.html console zeigt an, dass die Nachricht gesendet wird, aber mein Host sie aus irgendeinem Grund nicht empfängt. Ich kann sehen, dass der Hostnative.exe wird im Task-Manager gestartet, aber der Host empfängt die gesendeten Daten nicht.

popup.js

document.addEventListener('DOMContentLoaded', function() {
    var downloadButton= document.getElementById('Button');
    downloadButton.addEventListener('click', function () {
        chrome.tabs.query({currentWindow: true, active: true}, function (tabs) {
            chrome.tabs.executeScript(tabs[0].id, {file: "myScript.js"}, function (data) {
                sendNativeMessage(data[0]);
            });
        });
    });
});

function sendNativeMessage(msg) {
    var hostName = "com.google.example";

    console.log("Connecting to host: " + hostName);
    port = chrome.runtime.connectNative(hostName);

    message = {"text": msg};
    port.postMessage(message);

    console.log("Sent message: " + JSON.stringify(message));
}

Wenn ich die Nachricht von meiner Chrome-Erweiterung aus sende, wird das Konsolenprotokoll für @ angezeigpopup.html und die Nachricht ist korrekt.

Ich habe versucht, alles mit einem Code zu testen, von dem jemand behauptet hat, er habe funktionierNative Messaging Chrome. Insbesondere habe ich

native.exe

    static void Main(string[] args) {
        while (OpenStandardStreamIn() != null || OpenStandardStreamIn() != "")
        {
            Console.WriteLine(OpenStandardStreamIn());
        }
    }

    private static string OpenStandardStreamIn()
    {
        //Read first four bytes for length information
        System.IO.Stream stdin = Console.OpenStandardInput();
        int length = 0;
        byte[] bytes = new byte[4];
        stdin.Read(bytes, 0, 4);
        length = System.BitConverter.ToInt32(bytes, 0);

        string input = "";
        for (int i = 0; i < length; i++)
            input += (char)stdin.ReadByte();

        return input;
    }

Ich versuche immer noch, mich mit nativeMessaging zu beschäftigen, aber da ich sehe, dass die Nachricht über die Konsolenprotokolle gesendet wird, muss ich davon ausgehen, dass der Fehler bei meinem @ lieg.exe. Ich habe den Registrierungsschlüssel HKCU erstellt und das @ des Hosts erstellmanifest.json Datei. Da die Erweiterung das @ start.exe, Ich bin mir ziemlich sicher, dass all das auch gut funktioniert.

Wenn jemand dabei helfen könnte, wäre das sehr dankbar. Vielen Dank

BEARBEITEN Nachdem ich absolut nichts geändert habe, kann ich mein @ nicht bekommnative.exe von meiner Nebenstelle aus nicht mehr starten. Um dies zu beheben, habe ich versucht, meinen Absender so umzuschreiben, dass kein Port geöffnet wird:

...
chrome.tabs.executeScript(tabs[0].id, {file: "myScript.js"}, function (data) {
    chrome.runtime.sendNativeMessage('com.google.example', {"text":data[0]}, function(response) {
        if (chrome.runtime.lastError)
            console.log("ERROR");
        } else {
            console.log("Response: " + response);
        }
    });
});
...

Das funktioniert auch gar nicht. Ich habe keine Ahnung, was ich falsch mache oder warum mein Gastgeber.exe wurde nicht mehr gestartet, als ich eine Nachricht von meiner Nebenstelle gesendet habe.

EDIT # 2

Gute Nachrichten

Ich habe meinen Registrierungsschlüssel gelöscht und ihn dann erneut in die Registrierung des lokalen Computers (d. H. HKLM) eingefügt. Wieder habe ich den Code von @ verwendNative Messaging Chrome zum Senden und Empfangen von meinem Host. Wenn ich jetzt das Protokoll meiner Erweiterung betrachte, kann ich die richtige Antwort von meinem Host sehen. Ich benutze die "no-port" -Methode, indem ich einfach @ aufruchrome.runtime.sendNativeMessage(...), was für meine Zwecke in Ordnung ist. Leider erhalte ich keine Nachricht von der Nebenstelle an den Host. Auch meinhost.exe wird nie beendet, auch wenn die Nachricht empfangen wurde. Ich bin mir nicht sicher warum, aber wenn jemand helfen kann, würde ich es begrüßen.

Ich versuche auf meinem Host, die eingehende Nachricht in eine Datei zu schreiben, um zu testen, ob ich die Nachricht erhalte:

System.IO.File.WriteAllText(@"path_to_file.txt", OpenStandardStreamIn());

Hinweis: Die Nachricht, die ich von der Nebenstelle an den Host weitergebe, ist ungefähr 250 KB groß (variiert von Nachricht zu Nachricht).

Das Problem ist

Nothing wird in die Datei geschrieben. Es ist völlig leer.Die Erstellung der Datei dauert sehr lange (~ 4 Sekunden).Myhost.exe Instanz wird nie beendet. Es läuft noch (ich kann es im Task-Manager anzeigen).

Antworten auf die Frage(2)

Ihre Antwort auf die Frage