Рестарт/перезапуск TC

Обсуждение вопросов автоматизации Total Commander с помощью сторонних программ и скриптовых технологий.

Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер

addhaloka
Сообщения: 169
Зарегистрирован: Вт ноя 09, 2010 16:09

Сообщение addhaloka »

Больше всего нравится restartTC_Fasm отсюда, но он не работает на Win 8.1 (возможно, на Vista/Win 7 тоже). Оригинальный вообще не запускался на 8.1 - это я поправил, а вот дальше затык - процесс Тотала пришибается, а новый не создаётся. Буду пытаться разобраться.
Проблема в ReadProcessMemory - на осях выше XP как-то не так работает.
Кстати, благодаря такому способу получения данных о процессе TC restartTC_Fasm обладает уникальной фичей, отсутствующей у Tinny TC Restarter или ReloadTC - если TC был запущен с параметрами, то при перезапуске они сохраняются.
Пока не разобрался с ReadProcessMemory (впрочем, ещё даже не начинал :D ), сделал простой вариант, без главной фичи, но на мой взгляд не хуже других рестартеров + минимализм - код макс. упрощён, в итоге exeшник весит всего 1 Кб.
Если кого интересует, вот с исходником: https://www.upload.ee/files/7211508/res ... ed.7z.html

upd. Немного поправил код, перезалил.
addhaloka
Сообщения: 169
Зарегистрирован: Вт ноя 09, 2010 16:09

Сообщение addhaloka »

Разобрался с уникальной фичей (спасибо ManHunter за статью). :D Правда, есть некоторые сомнения:
[cut]1. В правильности оформления функций GetProcessInfo32(64) - проверка ошибок там минимальная, возможно надо больше? И нужно ли в них выделять память (проблем не заметил в 8.1 x64 и XP SP3, но мало ли :? )?
2. Антивирусное ПО может неадекватно реагировать на вызов функции из ntdll.dll.

https://www.upload.ee/files/7327907/res ... sm.7z.html[/cut]
Duremar
Сообщения: 46
Зарегистрирован: Чт авг 14, 2014 01:02

Сообщение Duremar »

Avada писал(а): Таким образом единственным средством, которое везде и всюду перезапускает именно то, что нужно, не требует дополнительных em-команд и при этом не глючит, оказался у меня Tinny TC Restarter. Команду (со своими именами и путями) использую такую:
%Commander_path%\Utils\TCRestarter\TinnyTCRestarter.exe 300 %Commander_EXE%
Если я правильно понял, должны разрядности меняться, но у меня одна и таже каждый раз загружается. Или же, на последних версиях тотала, этот способ уже не работает?
Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

Duremar
Если это выполнено из 32-битного TC, он и будет перезапущен. Если из 64-битного — перезапускается он. Только об этом речь и шла. У меня этот способ сохраняется как резервный, постоянно я давно уже пользуюсь скриптом. В TC 9,21a под Win7x64 при правильном указании путей и переменных всё прекрасно работает.
Что такое " должны разрядности меняться", в данном контексте не вполне понял. Для перезапуска со сменой разрядности есть, например, отдельный способ, упомянутый в этой же теме (с. 5-7). Им и пользуюсь.
Даже самая богатая фантазия
Не представит себе наши безобразия.
Jenialij
Сообщения: 6
Зарегистрирован: Пн июл 16, 2012 12:32

Сообщение Jenialij »

Здравствуйте, Flasher.
Решил воспользоваться Вашим скриптом для перезагрузки TC, но не могу разобраться с ошибкой: "Параметры не соответствуют описанию!" при его вызове.

Win 7 x64
TC 9.21 x32
Пути к History.ini и TCFS2.exe указал свои.
TCFS2Tools загружается через Autorun.
Настройки TCFS2.ini дефолтные. В Readme_TCFS2Tools сказано: "Для использования возможностей TCFS2Tools добавьте следующие команды в секцию [Items] файла конфигурации TCFS2:..."
Добавлял эти команды, но не помогло.
Прошу помощи.
Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

Jenialij
А с указанными в шапке скрипта параметрами для вызывающей скрипт кнопки или юзер-команды что? (Тем более, что в сообщении об ошибке — прямой намёк на это.) И в ридми TCFS2Tools.dll вы непонятно зачем полезли. Где-то в скрипте предлагалось менять его настройки по умолчанию?
Последний раз редактировалось Avada Пн фев 25, 2019 18:25, всего редактировалось 1 раз.
Даже самая богатая фантазия
Не представит себе наши безобразия.
Jenialij
Сообщения: 6
Зарегистрирован: Пн июл 16, 2012 12:32

Сообщение Jenialij »

Avada
Параметры указал такие же, как в шапке скрипта: "%X%P%Z" "%T" ""%N"" ""%M"
А в TCFS2.ini полез уже после, ибо не работало (обратил внимание на слова: "с обновлениями TCFS2.ini")
Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

Jenialij
В приведённых параметрах последней кавычки нет. Может быть, конечно, это здесь неверно скопировано... И ещё раз: никакие INI-файлы не нужны ни до, ни после. (Не говоря про то, что в ридми ясно написано про имя конфига для TCFS2Tools.dll — это ни разу не TCFS2.ini, а повторение имени модуля.) Я не писал там ничего, и у меня скрипт прекрасно работает который год подряд. Конфигурация TC и Windows практически та же самая. Проверьте как следует кнопку.
Даже самая богатая фантазия
Не представит себе наши безобразия.
Jenialij
Сообщения: 6
Зарегистрирован: Пн июл 16, 2012 12:32

Сообщение Jenialij »

Avada
Последнюю кавычку уже сюда, на форум, "недоскопировал", в самих параметрах она есть.
Про ini понял.
Пересмотрел уже wincmd.ini - все секции, касающиеся History "редиректятся" в History.ini.
Загадка, но ведь ошибка именно в параметрах, как Вы верно отметили.
Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

Jenialij
Предъявите код кнопки (копировать в её контекстном меню, вставить текстом в сообщение). У меня есть сомнения, туда ли вы вообще записали параметры.
Даже самая богатая фантазия
Не представит себе наши безобразия.
Jenialij
Сообщения: 6
Зарегистрирован: Пн июл 16, 2012 12:32

Сообщение Jenialij »

Avada
Команда:
[em_RestartTC]
cmd=%commander_path%\Scripts\TC\RestartTC.vbs
param="%X%P%Z" "%T" ""%N"" ""%M""
Menu=Перезапуск TC
***
Провел такой эксперимент - взял "чистый" TC 9.21 x32 (стандартно установил).
Внесенные изменения:
1) редирект секций [left], [right], [RightHistory], [LeftHistory] в History.ini;
2) установка Autorun.wdx с подключением в автозагрузку в цветовой схеме + автозагрузка TCFS2Tools.dll.
3) создание на панели TC кнопки:
cmd=%commander_path%\Scripts\TC\RestartTC.vbs
param="%X%P%Z" "%T" ""%N"" ""%M""

Скрипт заработал.
Значит, где-то в настройках "моего" TC ошибка. Но где?
Потом подумал: но в "своём" TC для запуска скрипта я использую команду em_, а в "чистом" TC - кнопку с указанием пути к скрипту с параметрами.
Казалось бы, какая разница? Но...
Создал в "чистом TC" файл WCMD_RUS.ini с единственной командой и прописал ее в кнопке.
Скрипт перестал работать, ошибка - "Параметры не соответствуют описанию!"

Повторил это всё многократно на "чистом" и "своём" TC.
Результат:
1) скрипт не работает через команду em_ (ни через кнопку, ни через меню WCMD_RUS.MNU )
2) скрипт работает только через кнопку с прописанным путём к скрипту с параметрами.
Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

Jenialij
Ошибка не в настройках, а в неполном понимании того, что куда нужно и можно записывать. Ключевой момент — имя INI-файла с em-командами. Для начала прочитайте хотя бы здесь, чем отличаются по области применения usercmd.ini и WCMD_RUS.ini и впредь последний файл (или подобные ему) как полный аналог usercmd.ini нигде и никогда не используйте. А если он для чего-то всё же нужен, помните о связанных с ним ограничениях. В "чистом" TC с английским языком, равно как и в русcком TC, использующем меню с именем, отличным от WCMD_RUS.MNU (например, расширенное), ВСЕ записи из этого INI-файла попросту игнорируются, программа его не видит, результат вами выше описан. Кроме того, если юзер-команда с одинаковым именем записана и в usercmd.ini, и в WCMD_RUS.ini, она берётся только из основного файла, даже если настройки внутри команды разные.
У меня сделана (разумеется, в usercmd.ini, предназначенном для любого языка и любого меню) юзер-команда со всеми параметрами, в кнопке указано её имя, всё прекрасно работает. К скрипту как таковому, насколько понимаю, всё это отношения не имеет никакого. Может быть, там и ещё что-то, но для начала с этим разберитесь.
Даже самая богатая фантазия
Не представит себе наши безобразия.
Jenialij
Сообщения: 6
Зарегистрирован: Пн июл 16, 2012 12:32

Сообщение Jenialij »

Avada
Спасибо, что уделили время, и за напутствие по "ini" тоже.
Учту.
Но дело в том, что команда em_, перенесенная в usercmd.ini, у меня все равно не работает.
Повторения имени команды тоже нет. В "чистом" TC файл WCMD_RUS.ini удалил, а в usercmd.ini всего одна запись. В обеих TC одинаковая ошибка.
Где-то у меня что-то не так. Пользуюсь многими скриптами и всё нормально, а тут какая-то незадача.
Пока повесил скрипт на кнопку, не используя команду em_. Скрипт со своей задачей отлично справляется, да и ощутимо быстрее аналогов перезапускает TC.
Еще раз спасибо.
Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

Jenialij
У меня очень похожая на вашу конфигурация, вплоть до редиректа части секций (ну, пути несколько другие), и всё прекрасно работает.
Что в данном случае теперь означает "всё равно не работает"? Как вы её пытаетесь заставить работать?
Оставим на минуту в покое кнопку (равно как и меню). Попытайтесь попросту запустить из командной строки TC вашу команду em_RestartTC. Результат? И простенький вопрос: у вас другие пользовательские команды (любые) работают?
Между прочим, вы привели выше не код кнопки, а, насколько понимаю, две выдернутых из BAR-файла строки. Не надо так делать, весь код дайте (выше сказано — как, да и на форуме сто раз пояснялось): все восемь строк, включая пустые.

P.S. Одну разницу я всё-таки обнаружил: в одном из вариантов команды параметры записаны с дополнительными кавычками в начале и в конце:
param=""%X%P%Z" "%T" ""%N"" ""%M"""
Попробуйте это, хотя у меня всё работает с обычным набором кавычек (и даже после %M с одной вместо двух). В этом синтаксисе (сколько там где нужно кавычек), похоже, и причина (хотя пока непонятная).
Даже самая богатая фантазия
Не представит себе наши безобразия.
Jenialij
Сообщения: 6
Зарегистрирован: Пн июл 16, 2012 12:32

Сообщение Jenialij »

Avada
Запуск команды em_RestartTC из командной строки TC также завершилось сообщением об ошибке.

А вот добавление еще одних кавычек проблему решило. Т.е. так:
param=""%X%P%Z" "%T" ""%N"" ""%M"""
Теперь все нормально.
Благодарю.
Ответить