Страница 7 из 12

Добавлено: Чт июл 17, 2014 20:02
gora
Flasher
Ну если Вы не хотите уточнить свой вопрос, то мне ответить нечего, ибо я его не понял.
Flasher писал(а):Да ну? А перебор в цикле с завершением всех запущенных процессов с тем же именем?
Это я тоже не понял. В чем упрек?
А вообще конкурировать с Вами в скриптописательстве я не собираюсь. Давайте замнем и забудем мой код. Я его ни кому не навязываю и не утверждаю, что он "лучше чем...". Хорошо?

Добавлено: Чт июл 17, 2014 20:30
Flasher
gora писал(а):Ну если Вы не хотите уточнить свой вопрос, то мне ответить нечего, ибо я его не понял.
Я бы уточнил, если бы понял, что уточнять. Какой вопрос остался непонятым?
gora писал(а):Это я тоже не понял. В чем упрек?
В общности данного перебора:
gora писал(а):

Код: Выделить всё

      For Each objProcess in colProcessList 
         WScript.Sleep 100 
         WSS.Run "taskkill /PID " & objProcess.ProcessID, 0 
      Next 
Сюда попадают все процессы с именами безотносительно указанных в начале кода путей.
gora писал(а):Хорошо?
А разобраться или доработать неинтересно? :)

Добавлено: Чт июл 17, 2014 20:43
gora
Flasher писал(а):А разобраться или доработать неинтересно?
Не-а
gora писал(а):Давайте замнем и забудем мой код

Добавлено: Чт июл 17, 2014 20:49
Flasher
ОК. Уже. :D

Добавлено: Чт июл 17, 2014 21:20
Skif_off
gora писал(а):
Skif_off писал(а):taskkill /PID - не очень корректно
Чем?
Штатно программы закрываем крестиком/Alt+F4, прибивать как-то нехорошо :)

Добавлено: Чт июл 17, 2014 21:29
gora
Skif_off писал(а): прибивать как-то нехорошо
Я в комментариях написал, что процесс не убивается, а закрывается.
Команда taskkill /PID будет убивать в комплекте с ключом /F.
Можете проверить. В последнем случае папки, открытые в панелях после запуска ТС не будут сохраняться при перезапуске ТС, а без ключа /F идет закрытие равнозначное нажатию на красный крест в заголовке окна ТС.

Добавлено: Пт июл 18, 2014 11:16
Skif_off
gora
Всегда думал, что taskkill - то же самое, что Завершить процесс, а taskkill /f - Завершить дерево.

Добавлено: Пт июл 18, 2014 11:25
gora
Skif_off писал(а): taskkill /f - Завершить дерево.
Нет.
/F Принудительное завершение процесса
/T Завершение указанного процесса и всех его дочерних процессов.
Подробности taskkill /?

Добавлено: Ср сен 03, 2014 02:27
Skif_off
Кто пользуется скриптом AutoIt или модификацией, обратите внимание: кажется, решена проблема определения нужной копии при нескольких запущенных ТС.

Добавлено спустя 50 минут:

Тысяча чертей :) Всплыла другая проблема: при перезапуске с админскими правами ("*" в начале команды или меню ПКМ) получается болт, т.к. переменные окружения не наследуются.
Надо думать. Или передать параметром при старте скрипта, или воспользоваться nircmd elevate

Добавлено спустя много, 2014.09.12:

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

Добавлено: Вт окт 14, 2014 17:28
Skif_off
Исправленный и окончательный вариант на AutoIt, гарантированная работа с несколькими запущенными копиями ТС, возможно закрытие дочерних окон отдельных поиска и синхронизации.

Есть мысль прикрутить возможность парсить командную строку на предмет /i=имя.ini, но пока борюсь :)

Добавлено: Вт дек 30, 2014 13:17
Skif_off
Поясните, пожалуйста, логику работы скрипта перезапуска:
1. Если ТС запущен с параметрами, при перезапуске нужно сохранить все или только /i= и /f=?

Добавлено спустя 5 минут:

2. В справке указано

Код: Выделить всё

TOTALCMD.EXE /i=wincmd.ini /f=wcx_ftp.ini
но реально сработает любой вариант:

Код: Выделить всё

TOTALCMD.EXE /i=wincmd.ini  f=wcx_ftp.ini
TOTALCMD.EXE  i=wincmd.ini /f=wcx_ftp.ini
TOTALCMD.EXE  i=wincmd.ini  f=wcx_ftp.ini
Это баг? Учитывать или надеятся, что все будут делать по справке?

Добавлено: Вт дек 30, 2014 16:01
Flasher
Skif_off
1. Только, конечно.
2. Ух ты. А я и не знал. Видимо, Гислер косую черту не ищет при парсинге. Пойду проверю.

Добавлено: Ср дек 31, 2014 10:28
Skif_off
Думаю, второй вариант скрипта не тянет на публичный, т.к использование WinAPI накладывает определённые ограничения... Сразу не сообразил, т.к. у меня поддержка AutoIt (что забавно - отчасти и в рассчёте на подобные случаи) реализована с помощью плагина AutoRun:

Код: Выделить всё

If %AUTORUN_TCARCH% = 32 Then 
  SetEnv /EV AutoIt %COMMANDER_PATH%\AutoIt3.exe 
Else 
  SetEnv /EV AutoIt %COMMANDER_PATH%\AutoIt3_x64.exe 
EndIf
З.Ы. У выложенного выше Исправленный и окончательный вариант на AutoIt мне не нравилась необходимость дописывать в команду "%COMMANDER_EXE%", сейчас могу убрать (исходя из предположения, что скрипт будет лежать рядом с %COMMANDER_EXE%), но это добавит функцию строк на 20. Или ладно с ним?

Добавлено: Чт авг 27, 2015 13:56
addhaloka
ask-rus писал(а):Опробовал Tinny TC Restarter с 64-битным TC - всё в норме.
Пришлось его пропатчить, чтобы правильно работал с Impomezia TC Color Presets и 64-битным TC, т. е. чтобы restarttc.exe перезапускал по умолчанию TOTALCMD64.EXE, а не TOTALCMD.EXE.
На этом поначалу и остановился - в 32-битной сборке использую оригинальный, в 64-х - пропатченный - всё прекрасно. :D Но тут, на досуге решил сделать сборку 32-64 - сразу же возник вопрос - как Tinny TC Restarter задействовать в ней? Нашёл решение (костыль конечно, но меня устраивает): переименовал оригинальный restarttc.exe в restarttc32.exe, а пропатченный для x64, соответственно в restarttc64.exe, для их запуска написал лаунчер, который запускает соответствующий рестартер в зависимости от того, из какого TC (32/64) вызван. Вроде нормально работает и с TC, и с TC Color Presets.
Если кого интересует, вышеописанное с исходником:
http://rghost.ru/private/6TZXTcJNR/adf1 ... e566ef2e6c

Добавлено: Сб июл 08, 2017 03:47
addhaloka
Но тут, на досуге решил сделать сборку 32-64 - сразу же возник вопрос - как Tinny TC Restarter задействовать в ней? Нашёл решение (костыль конечно, но меня устраивает): переименовал оригинальный restarttc.exe в restarttc32.exe, а пропатченный для x64, соответственно в restarttc64.exe, для их запуска написал лаунчер, который запускает соответствующий рестартер в зависимости от того, из какого TC (32/64) вызван. Вроде нормально работает и с TC, и с TC Color Presets.
Для TC Color Presets 0.1.1.7 патч больше не нужен, и для Тотала он не обязателен, как уже понял - однако всё-равно оставил патченный вариант, как более универсальный, чтобы не плодить лишние команды в сборке 32-64 или не использовать Autorun.wdx.
Но, с Tinny TC Restarter уже начал бесить один момент - он почему-то всегда запускает TC, даже если нажать "Нет" в этом окне. :(
С restartTC_Fasm и ReloadTC такого безобразия нет.
Больше всего нравится restartTC_Fasm отсюда, но он не работает на Win 8.1 (возможно, на Vista/Win 7 тоже). Оригинальный вообще не запускался на 8.1 - это я поправил, а вот дальше затык - процесс Тотала пришибается, а новый не создаётся. Буду пытаться разобраться.
Пока что перешёл на ReloadTC - пропатчил аналогично, как Tinny TC Restarter - вроде нормально работает. Плюс сделал доп. патч - заменил в импорте msvbvm50.dll на msvbvm60.dll (чтобы не плодить доп. библиотеки - msvbvm60.dll уже используется для TweakTC.
Вот набор, если кому надо: https://www.upload.ee/files/7203097/uti ... od.7z.html
Если TC только x32, то может пригодится patched_msvbvm60\ReloadTC32.exe*, если же только x64, то ReloadTC64.exe* из patched / patched_msvbvm60.

* Переименуйте в это случае в ReloadTC.exe.

Если сборка 32-64, то используйте все 3 exe, ReloadTC.exe в данном случае лаунчер, по типу, как в пред. посте для Tinny TC Restarter.

p.s. msvbvm50/60, разумеется должна находится рядом с ReloadTC или в %PATH%.