2015-04-27 20 views
7

Chcę dać użytkownikowi dowolną opcję, którą chce edytować plik, jak mogę otworzyć plik z domyślnym programem określonego typu pliku? Potrzebuję go do pracy z systemami Windows i Linux, ale opcja Mac też byłaby świetna.otwórz plik z domyślnym programem w węźle-webkit

+0

można powiedzieć coś więcej? twoje pytanie nie jest tak jasne – Khalid

+0

Mam ścieżkę do pliku, chcę go otworzyć z domyślnym programem – InvisibleUn1corn

Odpowiedz

9

jak powiedział PSkocik, pierwszy wykryj platformę i uzyskaj wiersz poleceń:

function getCommandLine() { 
    switch (process.platform) { 
     case 'darwin' : return 'open'; 
     case 'win32' : return 'start'; 
     case 'win64' : return 'start'; 
     default : return 'xdg-open'; 
    } 
} 

drugie wykonanie wiersza poleceń następnie ścieżką

var sys = require('sys'); 
var exec = require('child_process').exec; 

exec(getCommandLine() + ' ' + filePath); 
+0

Czy możemy uzyskać zamknięty sygnał? Czy jest połączenie, w którym wiedziałbym, że aplikacja została zamknięta? – django

2

Detect platformę i zastosowanie:

  • 'Start' w systemie Windows
  • 'otwarty' na Mac
  • 'xdg-open' na Linux
5

Dla pliku na dysku:

var nwGui = require('nw.gui'); 
nwGui.Shell.openItem("/path/to/my/file"); 

Dla zdalnych plików (np strony):

var nwGui = require('nw.gui'); 
nwGui.Shell.openExternal("http://google.com/"); 
0

nie jestem pewien, czy start był używany tak, jak w poprzednich wersjach systemu Windows, jednak w systemie Windows 10 nie działa tak, jak wskazano w odpowiedzi. Pierwszym argumentem jest tytuł okna.

Ponadto zachowanie między oknami i linuxem jest inne. Windows "start" uruchomi się i wyjdzie, pod linux, xdg-open będzie czekać.

Była to funkcja, która ostatecznie pracował dla mnie na obu platformach w podobny sposób:

function getCommandLine() { 
    switch(process.platform) { 
     case 'darwin' : 
     return 'open'; 
     default: 
     return 'xdg-open'; 
    } 
    } 

    function openFileWithDefaultApp(file) { 
     /^win/.test(process.platform) ? 
      require("child_process").exec('start "" "' + file + '"') : 
      require("child_process").spawn(getCommandLine(), [file], 
       {detached: true, stdio: 'ignore'}).unref(); 
    }