Autorun
Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер
А там нечего продумывать. Просто нужно, чтобы при использовании перезапуска command не срабатывал, иначе он не даст TC запуститься и убъёт все приложения, в то время как нужно перезапускать только TC. Тут именно функция плагина нужна, например, ключ Activate в ini, нулевое значение которого будет отключать выполнение команды плагина. В скрипте перезапуска я буду менять его на 0 до отключения ТС, по умолчанию (без ключа или при отсутствующем значении) и, самое главное, при запуске TC должно выставляться 1, либо ключ должен удаляться (я буду тогда строку добавлять, так даже проще).
Можно вообще без значения. Если в ini появилось слово Deactivate на какой-то строке, то отключать выполнение команды.
Вроде просто. Сделаешь?
Можно вообще без значения. Если в ini появилось слово Deactivate на какой-то строке, то отключать выполнение команды.
Вроде просто. Сделаешь?
А не проще ли создать второй конфиг, который будет использоваться твоими скриптами? Или же использовать прямо этот инишник, если скриптовая среда позволяет работать с инишниками. Если в конфиге некоторый параметр равен 0, скрипты не будут ничего делать. Но скрипт при запуске будет это самое значение выставлять в 1 или удалять. Всё элементарно реализуется средствами твоей скриптовой среды - чтение и запись в текстовый файл. Просто лишняя строчка скрипта - выход, если запуск не разрешен.
В INI нет понятия строки. Есть понятия секции и ключа в секции. Порядок секций и строк в рамках секции значения не имеют, имеет значение лишь то, в какой секции параметр находится.Можно вообще без значения. Если в ini появилось слово Deactivate на какой-то строке, то отключать выполнение команды.
А кто сказал, что они не будут ничего делать? При определённых условиях, которые я описал выше, они должны срабатывать в любом случае. Не писать же мне ещё один скрипт, который будет записывать строку. Зачем плодить для одной задачи лишнее?MVV писал(а):Если в конфиге некоторый параметр равен 0, скрипты не будут ничего делать.
В любом текстовом файле есть понятие строки. Мне всё равно, какое расширение будет у файла. Мне нужно условие: если последняя строка (ключ, не важно) = "Deactivate", то не выполнять команду.MVV писал(а):В INI нет понятия строки. Есть понятия секции и ключа в секции.
И потом, я не могу скриптом запрещать выполнение команд плагина.
Да, я могу написать условие в Unload-скрипте, при котором действие будет выполняться, но лучше бы его вообще не запускать, чем давать обращаться к нему.
Для INI-файла понятие номера строки значения не имеет. Операции чтения-записи выполняются с помощью функций, которые принимают в параметры имя секции и имя параметра. При этом мне совершенно безразлично, из строки с каким номером данные будут считаны, и в строку с каким номером они будут записаны.
Я так понял, что у тебя нет средств для работы с INI-файлами, а у меня нет никакого желания читать файл вручную и искать там последнюю строку.
Тебе всего-то надо перед перезапуском поставить где-либо (полная свобода действий) флаг перезапуска, в Unload-скрипте при наличии этого флага ничего не делать, а в Load-скрипте при его наличии также ничего не делать, но снимать его.
Я так понял, что у тебя нет средств для работы с INI-файлами, а у меня нет никакого желания читать файл вручную и искать там последнюю строку.
Не вижу ничего плохого в том, что скрипт запустится, но ничего не сделает. Окон он не создает, просто втихаря завершится. Зато имеем универсальность.Да, я могу написать условие в Unload-скрипте, при котором действие будет выполняться, но лучше бы его вообще не запускать, чем давать обращаться к нему.
Тебе всего-то надо перед перезапуском поставить где-либо (полная свобода действий) флаг перезапуска, в Unload-скрипте при наличии этого флага ничего не делать, а в Load-скрипте при его наличии также ничего не делать, но снимать его.
Непортабельное есть = Хелпер. Не вариант. Тебе не нужно читать файл, достаточно дописывать строку в конец. Меня это устроит. Либо пиши ключ без значения. Проверяй по его наличию. Мне будет проще, чем со значением.MVV писал(а):Я так понял, что у тебя нет средств для работы с INI-файлами, а у меня нет никакого желания читать файл вручную и искать там последнюю строку.
Как раз неуниверсальность. Так как скрипты будут зависеть друг от друга. А мне бы этого не хотелось. Они вполне имеют право на отдельное существование.MVV писал(а):Не вижу ничего плохого в том, что скрипт запустится, но ничего не сделает. Окон он не создает, просто втихаря завершится. Зато имеем универсальность.
Я об этом, собственно, и писал выше:MVV писал(а):Тебе всего-то надо перед перезапуском поставить где-либо (полная свобода действий) флаг перезапуска, в Unload-скрипте при наличии этого флага ничего не делать, а в Load-скрипте при его наличии также ничего не делать, но снимать его.
Но как я уже объяснил, мне лучше иметь 2 файла, чем 3.Flasher писал(а):Да, я могу написать условие в Unload-скрипте, при котором действие будет выполняться, но лучше бы его вообще не запускать, чем давать обращаться к нему.
О какой куче и каком файле речь?MVV писал(а):Не дело это - смешивать кучу способов работы с одним файлом.
Не понял, что ты имеешь в виду и уж тем более не понял, как скрипт может быть один, есть у обоих задачи разные (один перезапускает TC, другой вырубает программы)? Теоретически можно вообще все 500 скриптов в один запихать. Только кому такой глючный сыр-бор нужен?MVV писал(а):Кстати, если ты умеешь передавать параметры скриптам, то скрипт может быть и один, просто с разными параметрами для загрузки и выгрузки.
Чего тебе стоит сделать зависимость срабатывания от наличия какого-то ключа? Разговоров много, в то время как ты со своей лёгкой программистской руки давно бы сделал желаемое.
Речь о том, что если файл является INI-файлом, читать и писать его, как текстовый, не совсем корректно.О какой куче и каком файле речь?
Скрипт, который будет перезапускать, и так должен будет записывать параметр - значит, он уже будет зависимым с плагином, куда бы ты не ставил флаг временной блокировки выполнения скриптов плагина. А скрипт, который запускает плагин, автоматически связан с самим плагином. Тут без зависимостей в любом случае никак. Но встроить эту зависимость в скрипт - куда более гибкий и универсальный способ, чем зашить в плагин.
Можно даже не писать ничего никуда, просто создай в папке плагина или вообще во временной папке пустой файл с именем вида $tc_restarting$, а после завершения рестарта удаляй. Имя логичное и понятное, и проверять наличие флага проще, чем читать файл.
А завести скрипты загрузки и выгрузки в один файл считаю вполне разумным - они ведь делают симметричные вещи:
Код: Выделить всё
If WScript.Arguments.Count > 0 Then
Select Case WScript.Arguments(0)
Case "Load"
WScript.Echo "Load"
Case "Unload"
WScript.Echo "Unload"
End Select
End IfКод: Выделить всё
[Load]
Command=Execute.vbs Load
[Unload]
Command=Execute.vbs UnloadТак я же выше писал, что расширение меня не волнует Сделай с txt, мне какая разница.MVV писал(а):Речь о том, что если файл является INI-файлом, читать и писать его, как текстовый, не совсем корректно.
Создание файла происходит дольше, чем удаление и перезапись одного слова. Не вижу смысла.MVV писал(а):Можно даже не писать ничего никуда, просто создай в папке плагина или вообще во временной папке пустой файл с именем вида $tc_restarting$, а после завершения рестарта удаляй. Имя логичное и понятное, и проверять наличие флага проще, чем читать файл.
Не понимаю, к чему мне скрипт загрузки? Что он мне даст? Что я должен им загружать?MVV писал(а):А завести скрипты загрузки и выгрузки в один файл считаю вполне разумным - они ведь делают симметричные вещи:
С текстовым ты и сам без проблем справишься из скрипта)) Я ж говорю, полная универсальность и свобода действий: хочешь создавать файл - создаешь, хочешь писать в файл - пишешь.
А приведенный скрипт - просто пример того, как можно для Load и Unload использовать один файл. Наверняка ты и сам так умел, я лишь напомнил об этом и подчеркнул логичность такого подхода. Одна часть скрипта загружает фоновые программы, другая - выгружает, и т.п., всё на виду.
А приведенный скрипт - просто пример того, как можно для Load и Unload использовать один файл. Наверняка ты и сам так умел, я лишь напомнил об этом и подчеркнул логичность такого подхода. Одна часть скрипта загружает фоновые программы, другая - выгружает, и т.п., всё на виду.
Ну, не хочу я к скриптам подвязывать ещё один файл.MVV писал(а):С текстовым ты и сам без проблем справишься из скрипта))
Так а как это относится к моей задаче? Мне загружать-то ничего таким образом не надо. Мои скрипты по логике не объединимы, у них цели разные.MVV писал(а):Одна часть скрипта загружает фоновые программы, другая - выгружает, и т.п., всё на виду.
В общем, ты отказываешься помочь в доделке начатого, я правильно понял?
Сколько всего накопилось 
Одной-двумя командами всё многообразие действий над файлами не покроешь. В общем, такие задачи все же лучше решать полноценным скриптовым языком.
Что-то команда и без этого уже неприлично разрослась... По-хорошему, не очень правильно этот функционал включать в команду, это надо бы проверять до попытки запуска. В Autoit для этого, например, есть функция ProcessExists. В общем, формально не против, но надо обдумать как.HA3APET писал(а):Очень бы хотелось ключик для ShellExec, что бы если программа уже запущена (висит в процессах), она не запускалась.
Вопрос "обработки" произвольных файлов слишком обширен. Что понимается под обработкой? Вставить после определенной строки или вставить по заданному смещению в файле? Вставить с замещением или нет? Файл бинарный или текстовый? Если текстовый, то какая кодировка файла?LonerD писал(а):Раз сейчас нет такой возможности - то просьба на будущее ввести возможность обработки текстовых файлов (ini,cfg), в которых нет разделения на секции.
Одной-двумя командами всё многообразие действий над файлами не покроешь. В общем, такие задачи все же лучше решать полноценным скриптовым языком.
Нет. Может быть в будущем, но не в этой версии точно.LonerD писал(а):Поддерживается ли в операторах сравнения конъюнкция и дизъюнкция?
Можно подумать. Только в каком виде должно быть представление? Дело в том, что из системы нельзя получить напрямую коды языков в том виде, как принято в TC (RUS, DEU и т.д.).LonerD писал(а):Просьба включить в следующую версию переменную, определяющую язык запущенной ОС.
MVV писал(а):Кстати, Loopback, как насчет добавления для функции ShellExec параметра /WAIT, позволяющего дождаться выполнения задачи перед выполнением следующей команды автозапуска?
Flasher писал(а):Я бы вообще ожидание по умолчанию сделал без всяких ключей.
А другие запускают различные резиденты... Так что если уж делать, то пусть лучше /WAIT.MVV писал(а):Тогда добавить флаг /NOWAIT.
Можно в отдельном плагине сделать функцию, которая будет возвращать число (или строковое представление числа). А брать это число из функции типа GetUserDefaultLCID (возвращает текущую ЛОКАЛЬ) или GetUserDefaultUILanguage (возвращает ЯЗЫК ИНТЕРФЕЙСА). И вообще можно информационный модуль сделать, который будет возвращать эти параметры, разрядность системы и т.п.Можно подумать. Только в каком виде должно быть представление? Дело в том, что из системы нельзя получить напрямую коды языков в том виде, как принято в TC (RUS, DEU и т.д.).
Пусть будет /WAIT. А можно сделать оба, и опцию, задающую поведение по умолчанию.А другие запускают различные резиденты... Так что если уж делать, то пусть лучше /WAIT.