Собсно сабж. Поделитесь кодом плз.
"Software is like SEX - it's better when it's FREE" (C) Linus Torvalds
Отсутствует
Разберешся?
/* 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;
}
Отсутствует
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'
Файл ессно есть, но даже если проверку опустить, то все равно не работает...
Подскажите плз где ошибка
Отредактировано formatC'vt (08-04-2006 13:12:40)
"Software is like SEX - it's better when it's FREE" (C) Linus Torvalds
Отсутствует
c:\\windows\\notepad.exe ыыыть, разоблася, всем спс
"Software is like SEX - it's better when it's FREE" (C) Linus Torvalds
Отсутствует
Но вот возник другой вопрос, как из XULRunner запустить браузер установленный в системе по-умолчанию? Выше перечисленные функции не работают, если в качестве файла указать урл. Есть какой-нибудь способ сделать это? Или другого пути нет кроме как "встроить" свой браузер?
"Software is like SEX - it's better when it's FREE" (C) Linus Torvalds
Отсутствует
Неа, виснет на
"Software is like SEX - it's better when it's FREE" (C) Linus Torvalds
Отсутствует
...как из XULRunner запустить браузер установленный в системе по-умолчанию?...
Если файл локальный, то
var lf = Components. classes ["@mozilla.org/file/local;1"]. createInstance (Components. interfaces. nsILocalFile); lf. initWithPath ("P:\\close_wind.html"); lf. launch ();
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Прошу за простить за неточность формулировки вопроса, надо УРЛ открыть в браузере по-умолчанию.
"Software is like SEX - it's better when it's FREE" (C) Linus Torvalds
Отсутствует
Вспомнил детство, написал свою версию 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
Отсутствует
formatC'vt, насчёт детства ты загнул! Фасма тогда ещё не было! Кстати, насчёт просмотра строки до закрывающей кавычки - моветон, сделай ещё проверку на нуль, вдруг кавычек не окажется?
Непослушные локоны горничной выбивались из-под её кружевного фартука...
Отсутствует
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]
Но самом деле проблема не в этом, а вот в чем:
Работает
Не работает
Т.е. при попытке передать запускаему процессу какую-либо строку параметров он не запускается
"Software is like SEX - it's better when it's FREE" (C) Linus Torvalds
Отсутствует
Не запускается из-за переделанного start.exe? Или я чего не понял... Сорри, уже просто сплю... Завтра перечитаю - подумаю...
Непослушные локоны горничной выбивались из-под её кружевного фартука...
Отсутствует
Ничего не запускает, даже это:
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
Отсутствует
А если попробовать
Если
то получаем, что длина arguments - 12, а надо-то наверное всего 1... Мож из-за этого? %)
Отредактировано Lynxx (16-04-2006 18:06:22)
жЫзнь рандомна... и ничего с этим не поделаешь ;)
Отсутствует
Lynxx, понял, учим матчасть, спс заработало
"Software is like SEX - it's better when it's FREE" (C) Linus Torvalds
Отсутствует
Привет, запускаю из 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.
Отсутствует
мою тему трёхлетней давности подняли
быть может скрипт этот работу не завершает, а подвисает?
"Software is like SEX - it's better when it's FREE" (C) Linus Torvalds
Отсутствует
var process = Components.classes["@mozilla.org/process/util;1"]
.createInstance(Components.interfaces.nsIProcess);
Относительно недавно поменяли, теперь нужно так.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
var process = Components.classes["@mozilla.org/process/util;1"] .createInstance(Components.interfaces.nsIProcess);
Спасибо! Работает!
Добавлено 28-12-2009 15:27:16
Вопрос! В какой кодировке передаются аргументы к запуску? utf-8? Если да, то как в cp1251 преобразовать?
Отсутствует
В какой кодировке передаются аргументы к запуску? utf-8? Если да, то как в cp1251 преобразовать?
Проверять нужно...
А перекодировать можно через nsIScriptableUnicodeConverter.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
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, {});}
Как можно запустить приложение или, например, текстовый файл, находящийся в установленном расширении, внутри zip (xpi) архива? Можно ли запустить это приложение поверх всех окон?
Отсутствует
распаковать и запустить
Добавлено 02-10-2011 18:53:40
я сейчас изворачиваюсь так: создаю во временной директории скрипт, который исполняет некоторые команды и перенаправляет свой вывод в файл. потом парсю файл и получаю нужные мене данные. нет ли более прямых способов выполнять шелл-команды?
Отредактировано tenshi (02-10-2011 18:53:40)
Отсутствует