Google Chrome Extension Native Messaging, написанный на C#, не запускается при запуске компьютера

Я разработал расширение Google Chrome, которое использует общение в Native Messaging.

Ну... расширение работает отлично, но проблема в том, что хост Native Messaging не запускается при запуске компьютера. Чтобы запустить его, я должен открыть Chrome, перечислить расширения, найти свое расширение, а затем отключить и снова включить его.

Я понял одну вещь. в том, что когда я отключаю и снова включаю расширение и вижу диспетчер задач, я вижу, что запущены 3 процесса: chrome.exe, cmd и мой собственный exe-узел для обмена сообщениями.

Может быть, все 3 процесса не запускаются при запуске из-за команды "cmd"?

Почему команда cmd запускается вместе с собственным exe-сервером сообщений? Как я могу избежать этого?

РЕДАКТИРОВАТЬ:

Это файл manifest.json:

{
  "manifest_version": 2,

  "name": "Busca Cliente Lipigas",
  "short_name": "Busca Cliente",
  "description": "Permite recibir un número de teléfono desde SoftPhone y realizar la búsqueda del cliente en la página Web de Lipigas.",
  "version": "1.1",

  "permissions": [
    "tabs",
    "background",
    "nativeMessaging"
  ],

  "icons" : { "16": "img/icon16.png",
              "48": "img/icon48.png",
              "128": "img/icon128.png" },

  "background": {
    "scripts": ["main.js"],
    "persistent": false
    }

}

РЕДАКТИРОВАТЬ:

Это фоновая страница:

var clientSearchPage;
var clientEditPage;
var executed;

//console.log('Extensión iniciada.');
var port = chrome.runtime.connectNative('com.desytec.lipigas.sll');

port.onMessage.addListener(function (msg) {
    //console.log("Se recibió el comando " + msg.command + ' con el parámetro ' + msg.parameter);

    port.postMessage({ status: processCommand(msg.command + ' ' + msg.parameter) });
});

chrome.runtime.onSuspend.addListener(function () {
    port.postMessage({ status: 'EXIT' });
})

function processCommand(cmd) {    
    var parts = cmd.split(/\s+/);
    try {
        switch (parts[0]) {
            case 'Phone':
                executed = false;
                setPhone(parts[1]);
                return '+OK-Phone';
            case 'SetClientSearchPage':
                clientSearchPage = parts[1];
                if (clientSearchPage[0] != '/')
                    clientSearchPage = '/' + clientSearchPage;
                //console.log('Se configuró la página de búsqueda del cliente ' + clientSearchPage);
                return '+OK-SetClientSearchPage';
            case 'SetClientEditPage':
                clientEditPage = parts[1];
                if (clientEditPage[0] != '/')
                    clientEditPage = '/' + clientEditPage;
                //console.log('Se configuró la página de edición del cliente ' + clientEditPage);
                return '+OK-SetClientEditPage';
            default:
                return '+ERR-Comando No Encontrado';
        }
        //tcpConnection.sendMessage(Commands.run(cmd[0], cmd.slice(1)));
    } catch (ex) {
        return '+ERR-Comando No Procesado'
    }
}

function setPhone(phone) {
    chrome.tabs.query({
    }, function (tabs) {
        var tab = null;

        for (var i = 0; i < tabs.length; i++) {
            var tabURL = tabs[i].url;
            if (tabURL.indexOf(clientSearchPage) != -1 || tabURL.indexOf(clientEditPage) != -1)
                tab = tabs[i];
            //console.log(tabURL);
        }

        if (!executed) {
            searchClient(tab, phone);
            executed = true;
        }
    });
}

function searchClient(tab, phone) {
    if (tab == null)
        console.log('No se encontró ninguna de las páginas del cliente: ' + clientSearchPage + ', ' + clientEditPage);
    else {
        var site = '';
        var url = tab.url;
        if (url.indexOf(clientEditPage) != -1)
            site = url.substr(0, url.indexOf(clientEditPage));
        else if (url.indexOf(clientSearchPage) != -1)
            site = url.substr(0, url.indexOf(clientSearchPage));

        //console.log(site + clientSearchPage + '?telefono=' + phone);

        chrome.tabs.update(tab.id, { active: true, url: site + clientSearchPage + '?telefono=' + phone });

        //console.log('Se actualizó la URL con: ' + site + clientSearchPage + '?telefono=' + phone);
    }
}

1 ответ

  1. Поскольку собственный хост обмена сообщениями запускается только chrome.runtime.connectNative согласно документации, вам нужно запустить расширение при запуске компьютера, указав "background" разрешение в ваш расширение manifest.json:

    "permissions": ["background", "nativeMessaging"],
    

    Если какое-либо установленное размещенное приложение, упакованное приложение или расширение имеет "фоновое" разрешение, Chrome запускается (незаметно), как только пользователь входит в систему на своем компьютере, прежде чем пользователь запустит Chrome. Разрешение "фон" также позволяет Chrome продолжать работу (даже после закрытия последнего окна) до тех пор, пока пользователь явно не закроет Chrome.

    Это поведение может быть отключено пользователем в настройках Chrome:
    [x] Continue running background apps when Google Chrome is closed вариант.

  2. cmd запускается для создания конвейера stdio. В Windows командная строка:

    C: \ Windows \ system32 \ cmd.exe / c YOURHOSTAPP.exe --parent-window = 10158736 расширение chrome://knldjmfmopnpolahpmmgbagdohdnhkik/ <\.\ Pipe\chrome.nativeMessaging.in.9c12d69ad9deb1ce> \.\ Pipe\chrome.nativeMessaging.out.9c12d69ad9deb1ce

    По состоянию на 5 октября 2016 г.--parent-window= параметр будет перемещен после chrome-extension://,

Другие вопросы по тегам