Полезная информация

Будьте в курсе последних изменений в мире Mozilla, следя за нашим микроблогом в Twitter.

№102-04-2006 23:23:11

formatC'vt
Участник
 
Группа: Members
Откуда: М.О., г. Ивантеевка
Зарегистрирован: 09-01-2005
Сообщений: 94
Веб-сайт

Запуск внешнего приложения

Собсно сабж. Поделитесь кодом плз.


"Software is like SEX - it's better when it's FREE" (C) Linus Torvalds

Отсутствует

 

№202-04-2006 23:25:59

Yan
Участник
 
Группа: Extensions
Откуда: Москва
Зарегистрирован: 27-02-2005
Сообщений: 1019

Re: Запуск внешнего приложения

Код можно подглядеть в расширении External Application Buttons.

Отсутствует

 

№304-04-2006 23:30:46

diagnostik
Участник
 
Группа: Members
Зарегистрирован: 02-04-2006
Сообщений: 3

Re: Запуск внешнего приложения

Разберешся?
/* function startProcess - START EXTERNAL PROGRAM */
//new file object factory
const FileFactory = new Components.Constructor("@mozilla.org/file/local;1","nsILocalFile","initWithPath");

function startProcess(str_LocalProgram, arguments){
        //program to start
        str_LocalProgram = (str_LocalProgram == null)?"/usr/X11R6/bin/xterm":str_LocalProgram;
        //try to create file object
        try {
                var obj_Program = new FileFactory(str_LocalProgram);
        } catch (e) { alert(e) }

        //try to create process
        try {
                var obj_Process = Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess);
        } catch (e) { alert(e); }
        //setup process
        obj_Process.init(obj_Program);
        //start process
        obj_Process.run(false, arguments, ((arguments != null)?arguments.length:0), {});
    return obj_Program;
}

Отсутствует

 

№408-04-2006 13:10:17

formatC'vt
Участник
 
Группа: Members
Откуда: М.О., г. Ивантеевка
Зарегистрирован: 09-01-2005
Сообщений: 94
Веб-сайт

Re: Запуск внешнего приложения

Выделить код

Код:

function launchfile1()
{
var file = Components.classes['@mozilla.org/file/local;1']
	.createInstance(Components.interfaces.nsILocalFile);
var process = Components.classes['@mozilla.org/process/util;1']
	.getService(Components.interfaces.nsIProcess);
file.initWithPath('c:\windows\notepad.exe'); 
if(! file.exists()) 
  {
	alert('file not found!');
  }
else
  { 
	alert('start');
	file.launch(); 
	process.init(file); 
	var arguments='123'; 
	process.run(false, arguments, arguments.length); 
  }
}
Выделить код

Код:

function launchfile2()
{
alert('begin');
const FileFactory = new Components.Constructor("@mozilla.org/file/local;1","nsILocalFile","initWithPath");
str_LocalProgram ='c:\windows\notepad.exe';
try {
	alert('try1');
	var obj_Program = new FileFactory(str_LocalProgram);
	if (! obj_Program.exists())
                {
	  	alert('file not found!');
	  }
} catch (e) { alert('catch1'); alert(e) }

try {
	alert('try2');
	var obj_Process = Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess);
} catch (e) { alert('catch2'); alert(e); }
alert('init');
obj_Process.init(obj_Program);
alert('start');
obj_Process.run(false, arguments, 0, {});

}

Оба варианта выносит с сообщением 'file not found' :cry:
Файл ессно есть, но даже если проверку опустить, то все равно не работает...
Подскажите плз где ошибка

Отредактировано formatC'vt (08-04-2006 13:12:40)


"Software is like SEX - it's better when it's FREE" (C) Linus Torvalds

Отсутствует

 

№508-04-2006 13:14:00

formatC'vt
Участник
 
Группа: Members
Откуда: М.О., г. Ивантеевка
Зарегистрирован: 09-01-2005
Сообщений: 94
Веб-сайт

Re: Запуск внешнего приложения

c:\\windows\\notepad.exe ыыыть, разоблася, всем спс =)


"Software is like SEX - it's better when it's FREE" (C) Linus Torvalds

Отсутствует

 

№608-04-2006 13:27:04

formatC'vt
Участник
 
Группа: Members
Откуда: М.О., г. Ивантеевка
Зарегистрирован: 09-01-2005
Сообщений: 94
Веб-сайт

Re: Запуск внешнего приложения

Но вот возник другой вопрос, как из XULRunner запустить браузер установленный в системе по-умолчанию? Выше перечисленные функции не работают, если в качестве файла указать урл. Есть какой-нибудь способ сделать это? Или другого пути нет кроме как "встроить" свой браузер?


"Software is like SEX - it's better when it's FREE" (C) Linus Torvalds

Отсутствует

 

№712-04-2006 18:10:35

mojo
Участник
 
Группа: Members
Зарегистрирован: 15-03-2006
Сообщений: 29

Re: Запуск внешнего приложения

может быть
"start url" если это win.

Отсутствует

 

№815-04-2006 10:44:00

formatC'vt
Участник
 
Группа: Members
Откуда: М.О., г. Ивантеевка
Зарегистрирован: 09-01-2005
Сообщений: 94
Веб-сайт

Re: Запуск внешнего приложения

Неа, виснет на

Выделить код

Код:

file.initWithPath('start');

:(


"Software is like SEX - it's better when it's FREE" (C) Linus Torvalds

Отсутствует

 

№915-04-2006 15:15:21

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
Веб-сайт

Re: Запуск внешнего приложения

formatC'vt пишет

...как из XULRunner запустить браузер установленный в системе по-умолчанию?...

Если файл локальный, то

Выделить код

Код:

var lf = Components. classes ["@mozilla.org/file/local;1"]. createInstance (Components. interfaces. nsILocalFile);
lf. initWithPath ("P:\\close_wind.html");
lf. launch ();

Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№1015-04-2006 15:34:44

formatC'vt
Участник
 
Группа: Members
Откуда: М.О., г. Ивантеевка
Зарегистрирован: 09-01-2005
Сообщений: 94
Веб-сайт

Re: Запуск внешнего приложения

Прошу за простить за неточность формулировки вопроса, надо УРЛ открыть в браузере по-умолчанию.


"Software is like SEX - it's better when it's FREE" (C) Linus Torvalds

Отсутствует

 

№1116-04-2006 02:41:28

formatC'vt
Участник
 
Группа: Members
Откуда: М.О., г. Ивантеевка
Зарегистрирован: 09-01-2005
Сообщений: 94
Веб-сайт

Re: Запуск внешнего приложения

Вспомнил детство, написал свою версию start.exe =)

Выделить код

Код:

format PE GUI
entry start

section '.flat' code data readable executable writeable

start:
        call [GetCommandLine]
@@loop: inc eax
        cmp byte[eax],'"'
        jnz @@loop
        inc eax
        inc eax
        push 1
        push 0
        push 0
        push eax
        push lpOperation
        push 0
        call [ShellExecute]
        push 0
        call [ExitProcess]

lpOperation db 'open',0

data import

  dd 0,0,0,RVA kernel_name,RVA kernel_table
  dd 0,0,0,RVA shell_name,RVA shell_table
  dd 0,0,0,0,0

  kernel_table:
    ExitProcess dd RVA _ExitProcess
    GetCommandLine dd RVA _GetCommandLineA
    dd 0
  shell_table:
    ShellExecute dd RVA _ShellExecuteA
    dd 0

  kernel_name db 'KERNEL32.DLL',0
  shell_name db 'SHELL32.DLL',0

  _ExitProcess dw 0
    db 'ExitProcess',0
  _GetCommandLineA dw 0
    db 'GetCommandLineA',0
  _ShellExecuteA dw 0
   db 'ShellExecuteA',0
end data

"Software is like SEX - it's better when it's FREE" (C) Linus Torvalds

Отсутствует

 

№1216-04-2006 16:04:54

ViRUS
ДМБ 2008
 
Группа: Extensions
Откуда: Xa!
Зарегистрирован: 05-11-2004
Сообщений: 1468

Re: Запуск внешнего приложения

formatC'vt, насчёт детства ты загнул! Фасма тогда ещё не было! ;) Кстати, насчёт просмотра строки до закрывающей кавычки - моветон, сделай ещё проверку на нуль, вдруг кавычек не окажется? ;)


Непослушные локоны горничной выбивались из-под её кружевного фартука...

Отсутствует

 

№1316-04-2006 17:51:16

formatC'vt
Участник
 
Группа: Members
Откуда: М.О., г. Ивантеевка
Зарегистрирован: 09-01-2005
Сообщений: 94
Веб-сайт

Re: Запуск внешнего приложения

ViRUS, да не многим он от TASM'a отличается, что первое под руку попалось, на том и написал и особых проблем этот запоздалый переход не вызвал ;)
Кстати в случае отсутствия кавычек надо на пробел проверять в первую очередь, а не нуль, строка параметров через пробел тогда идет ;) Но на нуль проверка тоже не помешает, хотя запуск программы без переданных параметров не планируется. Но можно вместо:

Выделить код

Код:

start:
        call [GetCommandLine]
@@loop: inc eax
        cmp byte[eax],'"'
        jnz @@loop
        inc eax
        inc eax
        push 1
        push 0
        push 0
        push eax
        push lpOperation
        push 0
        call [ShellExecute]
        push 0
        call [ExitProcess]

Сделать:

Выделить код

Код:

start:
        call [GetCommandLine]
        cmp byte[eax],0
        jz @@exit
        cmp byte[eax],'"'
        jnz @@woQuote
@@quote:
        inc eax
        cmp byte[eax],0
        jz @@exit
        cmp byte[eax],'"'
        jnz @@quote
        inc eax
        jmp @@exec
@@woQuote:
        inc eax
        cmp byte[eax],0
        jz @@exit
        cmp byte[eax],' '
        jnz @@woQuote
@@exec:
        inc eax
        push 1
        push 0
        push 0
        push eax
        push lpOperation
        push 0
        call [ShellExecute]
@@exit:
        push 0
        call [ExitProcess]

Но самом деле проблема не в этом, а вот в чем:
Работает

Выделить код

Код:

obj_Process.run(false, 0,0);

Не работает

Выделить код

Код:

arguments='notepad.exe';
obj_Process.run(false, arguments,arguments.length);

Т.е. при попытке передать запускаему процессу какую-либо строку параметров он не запускается :(


"Software is like SEX - it's better when it's FREE" (C) Linus Torvalds

Отсутствует

 

№1416-04-2006 17:57:19

ViRUS
ДМБ 2008
 
Группа: Extensions
Откуда: Xa!
Зарегистрирован: 05-11-2004
Сообщений: 1468

Re: Запуск внешнего приложения

Не запускается из-за переделанного start.exe? Или я чего не понял... Сорри, уже просто сплю... Завтра перечитаю - подумаю... :lol:


Непослушные локоны горничной выбивались из-под её кружевного фартука...

Отсутствует

 

№1516-04-2006 18:05:00

formatC'vt
Участник
 
Группа: Members
Откуда: М.О., г. Ивантеевка
Зарегистрирован: 09-01-2005
Сообщений: 94
Веб-сайт

Re: Запуск внешнего приложения

Ничего не запускает, даже это:

Выделить код

Код:

include 'include\win32ax.inc'
.code
  start:
	invoke	GetCommandLine
	invoke	MessageBox,HWND_DESKTOP,eax,"Command Line is",MB_OK
	invoke	ExitProcess,0
.end start

"Software is like SEX - it's better when it's FREE" (C) Linus Torvalds

Отсутствует

 

№1616-04-2006 18:05:01

Merlyel
псЫх
 
Группа: Extensions
Откуда: Уфа
Зарегистрирован: 20-12-2005
Сообщений: 2415

Re: Запуск внешнего приложения

А если попробовать

Выделить код

Код:

var arguments=['notepad.exe'];

Если

Выделить код

Код:

arguments='notepad.exe';

то получаем, что длина arguments - 12, а надо-то наверное всего 1... Мож из-за этого? %)

Отредактировано Lynxx (16-04-2006 18:06:22)


жЫзнь рандомна... и ничего с этим не поделаешь ;)

Отсутствует

 

№1716-04-2006 18:08:03

formatC'vt
Участник
 
Группа: Members
Откуда: М.О., г. Ивантеевка
Зарегистрирован: 09-01-2005
Сообщений: 94
Веб-сайт

Re: Запуск внешнего приложения

Lynxx, понял, учим матчасть, спс заработало =)


"Software is like SEX - it's better when it's FREE" (C) Linus Torvalds

Отсутствует

 

№1816-04-2006 18:11:33

Merlyel
псЫх
 
Группа: Extensions
Откуда: Уфа
Зарегистрирован: 20-12-2005
Сообщений: 2415

Re: Запуск внешнего приложения

formatC'vt
Лучше - читаем MozillaZine %) Ну и заодно матчасть поучить можно ;)


жЫзнь рандомна... и ничего с этим не поделаешь ;)

Отсутствует

 

№1921-12-2009 15:19:52

AntoshaChips
Участник
 
Группа: Members
Зарегистрирован: 21-10-2009
Сообщений: 10
UA: Shiretoko 3.5

Re: Запуск внешнего приложения

Привет, запускаю из firefox питоновский скрипт:

Выделить код

Код:

var file = Components.classes['@mozilla.org/file/local;1']

            .createInstance(Components.interfaces.nsILocalFile);

        var process = Components.classes['@mozilla.org/process/util;1']

            .getService(Components.interfaces.nsIProcess);

        file.initWithPath('D:\\python\\script3.py');
        process.init(file);

        var arguments=['...'];

        process.run(true, arguments, arguments.length);

Всё работает, но только один раз. Второй раз скрипт не запускается. Помогает только перезапуск firefox.

Отсутствует

 

№2021-12-2009 18:41:32

formatC'vt
Участник
 
Группа: Members
Откуда: М.О., г. Ивантеевка
Зарегистрирован: 09-01-2005
Сообщений: 94
UA: Firefox 3.5
Веб-сайт

Re: Запуск внешнего приложения

мою тему трёхлетней давности подняли :)
быть может скрипт этот работу не завершает, а подвисает?


"Software is like SEX - it's better when it's FREE" (C) Linus Torvalds

Отсутствует

 

№2121-12-2009 20:15:58

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 3.5

Re: Запуск внешнего приложения

var process = Components.classes["@mozilla.org/process/util;1"]
                        .createInstance(Components.interfaces.nsIProcess);

Относительно недавно поменяли, теперь нужно так.


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№2228-12-2009 15:14:30

AntoshaChips
Участник
 
Группа: Members
Зарегистрирован: 21-10-2009
Сообщений: 10
UA: Shiretoko 3.5

Re: Запуск внешнего приложения

Выделить код

Код:

var process = Components.classes["@mozilla.org/process/util;1"]
                        .createInstance(Components.interfaces.nsIProcess);

Спасибо! Работает!

Добавлено 28-12-2009 15:27:16
Вопрос! В какой кодировке передаются аргументы к запуску? utf-8? Если да, то как в cp1251 преобразовать?

Отсутствует

 

№2329-12-2009 01:49:35

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 3.5

Re: Запуск внешнего приложения

AntoshaChips пишет

В какой кодировке передаются аргументы к запуску? utf-8? Если да, то как в cp1251 преобразовать?

Проверять нужно...
А перекодировать можно через nsIScriptableUnicodeConverter.


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№2402-10-2011 17:04:59

alex345
Участник
 
Группа: Members
Зарегистрирован: 02-10-2011
Сообщений: 2
UA: Chrome 14.0

Re: Запуск внешнего приложения

formatC'vt пишет

function launchfile1()
{
var file = Components.classes['@mozilla.org/file/local;1']
    .createInstance(Components.interfaces.nsILocalFile);
var process = Components.classes['@mozilla.org/process/util;1']
    .getService(Components.interfaces.nsIProcess);
file.initWithPath('c:\windows\notepad.exe');
if(! file.exists())
  {
    alert('file not found!');
  }
else
  {
    alert('start');
    file.launch();
    process.init(file);
    var arguments='123';
    process.run(false, arguments, arguments.length);
  }
}

formatC'vt пишет

function launchfile2()
{
alert('begin');
const FileFactory = new Components.Constructor("@mozilla.org/file/local;1","nsILocalFile","initWithPath");
str_LocalProgram ='c:\windows\notepad.exe';
try {
    alert('try1');
    var obj_Program = new FileFactory(str_LocalProgram);
    if (! obj_Program.exists())
                {
          alert('file not found!');
      }
} catch (e) { alert('catch1'); alert(e) }

try {
    alert('try2');
    var obj_Process = Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess);
} catch (e) { alert('catch2'); alert(e); }
alert('init');
obj_Process.init(obj_Program);
alert('start');
obj_Process.run(false, arguments, 0, {});

}

Как можно запустить приложение или, например, текстовый файл, находящийся в установленном расширении, внутри zip (xpi) архива? Можно ли запустить это приложение поверх всех окон?

Отсутствует

 

№2502-10-2011 18:31:13

tenshi
Участник
 
Группа: Members
Зарегистрирован: 30-03-2008
Сообщений: 47
UA: Chrome 13.0

Re: Запуск внешнего приложения

распаковать и запустить

Добавлено 02-10-2011 18:53:40
я сейчас изворачиваюсь так: создаю во временной директории скрипт, который исполняет некоторые команды и перенаправляет свой вывод в файл. потом парсю файл и получаю нужные мене данные. нет ли более прямых способов выполнять шелл-команды?

Отредактировано tenshi (02-10-2011 18:53:40)

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]