Граждане! Не подскажет ли кто способа чтения из файла без вызова initwithpath ? ибо этому методу не нравится путь, что я ввожу. возможно поможет относительный путь, но не смог понять как с ним работать. необходимо читать из компорта. Соответственно весь путь к файлу - это "Com1". любой язык программирования, да и просто коммандная строка съедает его в лет и замечательно читает оттуда, а FF3 и nsiLocalFile ругаются при вызове initwithpath.
Отсутствует
Пример того, как выполнять команду используя cmd.exe
var file = Components.classes["@mozilla.org/file/local;1"] .createInstance(Components.interfaces.nsILocalFile); // Initializing with full path to cmd.exe which should normally be in "ComSpec" environment variable file.initWithPath( Components.classes["@mozilla.org/process/environment;1"] .getService(Components.interfaces.nsIEnvironment) .get("ComSpec") ); // Using "start /D filedir file.exe" to run file.exe with "filedir" as current working dir var cmd = "start /D z:\\path\\ z:\\path\\sample.exe"; // Passing /C flag for cmd.exe to close after execution var args = ["/C", cmd]; var process = Components.classes["@mozilla.org/process/util;1"] .createInstance(Components.interfaces.nsIProcess); process.init(file); // Starting new process without waiting for its termination process.run(false, args, args.length);
Кстати, нельзя даже запустить программу из директории в PATH. Надо иметь полный путь, т.е. фактически самому парсить переменные окружения или реестр (для всяких %SystemRoot%). Тем более не будет работать com1
Отсутствует
как то это все, простите, через задницу. мне тогда проще написать свое простейшее windows приложение, которое бы резидентно читало из com1 и выкладывало все в более доступный физический файл с нормально воспринимаемым именем, но хотелось бы найти способ читать именно из com1 чтобы было единообразие и одно расширение для *nix и windows систем.
Отредактировано N1PhANtoM (03-03-2009 08:41:10)
Отсутствует
Crazy-EyE
Пример того, как выполнять команду используя cmd.exe
У меня под Убунту такая передача аргументов не заработала - пришлось сначала делать командный файл, а уже потом его выполнять.
N1PhANtoM
как то это все, простите, через задницу
Есть такое
мне тогда проще написать свое простейшее windows приложение, которое бы резидентно читало из com1 и выкладывало все в более доступный физический файл с нормально воспринимаемым именем, но хотелось бы найти способ читать именно из com1 чтобы было единообразие и одно расширение для *nix и windows систем.
В принципе можно попробовать решить дело XPCOM.
Я в аналогичной ситуации работал с внешними консольными приложениями (мне их дали готовые).
В принципе если это всё можно сделать из cmd - можно создать файл со скриптом прямо из расширения и работать с ним.
С бинарным файлом так тоже можно проделать теоретически (не пробовал) (то есть com(он компактнее) в бинарном виде засунуть в расширение)...
--- ---
Отсутствует
У меня под Убунту такая передача аргументов не заработала - пришлось сначала делать командный файл, а уже потом его выполнять.
Естественно, cmd.exe только под винду. Просто я хотел показать фишку про ComSpec и то, что обязательно надо полный путь.
Под линукс уже обсуждали. Думаю будет работать так (не тестировал):
var file = Components.classes["@mozilla.org/file/local;1"] .createInstance(Components.interfaces.nsILocalFile); // Initializing with full path to cmd.exe which should normally be in "ComSpec" environment variable file.initWithPath("/bin/bash"); // Example, change to what you need var cmd = "ls"; // Passing -c flag to bash to execute command var args = ["-c", cmd]; var process = Components.classes["@mozilla.org/process/util;1"] .createInstance(Components.interfaces.nsIProcess); process.init(file); // Starting new process without waiting for its termination process.run(false, args, args.length);
(В исходном примере для Windows была задача запустить программу в нужной директории, здесь мне было лень разбираться)
В принципе можно попробовать решить дело XPCOM.
Да, бинарный XPCOM идеологически самый правильный вариант, просто много возни будет (поэтому обычно XPCOM стараются избежать).
Отсутствует
Crazy-EyE
Естественно, cmd.exe только под винду
Ну я подумал, что это и так очевидно, поэтому не стал про это распинаться - видимо ошибся.
Думаю будет работать так (не тестировал)
А я тестировал - не работало.
--- ---
Отсутствует