JavaScript для утилит командной строки

ConcurrentBag является потокобезопасным, но ваш код не является:

if (!SystemNames.Contains(name))
{
    SystemNames.Add(name);
}

Contains будет выполняться потокобезопасным образом, затем Add также будет выполняться потокобезопасным , но у вас нет гарантии, что товар не был добавлен между ними.

Для ваших нужд я рекомендую использовать ConcurrentDictionary. Просто игнорируйте значение, так как оно вам не понадобится.

var SystemNames = new ConcurrentDictionary<string, bool>();

Затем используйте метод TryAdd, чтобы выполнить «если не содержит, то добавить» в одной атомарной операции:

SystemNames.TryAdd(name, true);
6
задан rwallace 16 May 2009 в 17:12
поделиться

4 ответа

Автономный исполняемый файл?

Кстати, вы задаете вопрос, я не уверен, знаете ли вы, но Windows Script Host, входящий в состав Windows, позволяет запускать файлы .js из командной строки. Ваш javascript не будет исполняемым файлом, он останется скриптом, текстовым файлом. Сценарий выполняется в cscript.exe, предоставляемом WSH. Компиляция не требуется. Может быть, вы все это знали.

Я использую Javascript таким образом для различных утилит в Windows.

Я думаю, что ваше чутье верно в отношении доступности библиотек. Вы вроде сами , чтобы найти все эти вещи. Хотя, как только вы их найдете, несложно упаковать библиотеки Javascript как компоненты COM и разрешить повторное использование откуда угодно. См. Здесь пример упаковки библиотеки Google Diff / Patch / Match Javascript в COM.

Приложение : Как только часть кода становится доступной в COM, он может быть использован любым Javascript, запущенным на машине. Некоторые примеры COM-объектов, доступных для сценариев Javascript, работающих в WSH:

  • Объект MSXML2.XMLHTTP - используется в AJAX, но может использоваться для любой связи HTTP. Также существует объект для механизма XSLT, поэтому вы можете выполнять преобразования из скрипта.
  • Excel.Application - позволяет открывать электронные таблицы Excel и автоматизировать их с помощью Javascript.
  • Communicator.UIAutomation - автоматизация MS Communicator (отправка IM через скрипт)
  • COM-объекты для Google Планета Земля .
  • SlowAES - реализация шифрования AES на основе Javascript.
8
ответ дан 8 December 2019 в 03:54
поделиться

Вы можете использовать Rhino для компиляции Javascript в байт-код Java и получить доступ ко всем библиотекам Java.

Или вы можете использовать JScript.net и получить доступ к библиотекам .net. .net включает jsc.exe, который создает exe-файлы.

Для работы обоих из них требуется установка соответствующей инфраструктуры.

7
ответ дан 8 December 2019 в 03:54
поделиться

Rhino связан с JDK 1.6, jrunscript.exe в каталоге bin позволит вам запускать любой Javascript, который вы хотите. Поскольку он работает под Java, вы получаете доступ ко всем имеющимся у вас библиотекам Java.

Мы широко используем его из командной строки. Это очень хорошо.

4
ответ дан 8 December 2019 в 03:54
поделиться

Один из способов - написать эти утилиты как приложения AIR. Они могут быть написаны на JavaScript и не должны иметь пользовательского интерфейса. У них есть доступ к командной строке, и существуют существующие библиотеки ActionScript 3, которые могут обрабатывать FTP и т. Д. Эти API-интерфейсы ActionScript можно вызывать из JS в приложениях AIR. Приложения AIR также имеют доступ к базе данных sqlite.

1
ответ дан 8 December 2019 в 03:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: