0

Я разработал расширение хром Google, в котором используется связь с Native Messaging.Google chrome Расширение Собственный почтовый ящик, написанный на C#, не запускается при запуске компьютера

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

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

Возможно, все три процесса не запускаются при запуске из-за команды «cmd»?

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

EDIT:

Это файл 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 
    } 

} 

EDIT:

Это фон страницы:

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); 
    } 
} 

ответ

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

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

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

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

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

    C: \ Windows \ system32 \ cmd.exe/с YOURHOSTAPP.exe --parent окна = 10158736 хром расширение:. // knldjmfmopnpolahpmmgbagdohdnhkik/< \ \ труба \ хром .nativeMessaging.in.9c12d69ad9deb1ce> \. \ труба \ chrome.nativeMessaging.out.9c12d69ad9deb1ce параметр

    As of Oct 5, 2016--parent-window= будет перемещен после chrome-extension://.

+0

Я обновил вопрос с помощью файла манифеста. Это вы показываете. Однако, как я уже сказал, встроенный хост обмена сообщениями запускается, когда я вручную отключается, а затем снова включаю расширение ... поэтому я считаю, что json-файл верен. И даже, когда я закрываю Chrome, основной хост mesaging продолжает работать.Проблема возникает только при запуске компьютера (встроенный сервер обмена сообщениями не запускается автоматически) – jstuardo

+1

@jstuardo Вы должны показать, как вы называете «connectNative». – Xan

+0

Я добавил справочную страницу в вопрос. connectNative появляется в начале, и это: var port = chrome.runtime.connectNative ('com.desytec.lipigas.sll'); ...... при запуске компьютера расширение появляется, поэтому я думаю, что он проходит через справочную страницу .... возможно, в какой-то части этого кода есть ошибка, из-за которой не запускается собственный сервер обмена сообщениями – jstuardo