Определить разрядность запущенного TC

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

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

Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

gora
Ну почему же сомнительно? Кто-то привык к тому имени, у кого-то пути в командах, кнопках, ключах wincmd.ini прямые указаны, причин хватает.

В общем, я пока только одно могу предложить. %COMMANDER_PATH% + exe. По логике никто не будет там держать exe-файлы, из которых будет запускаться ТС. Устроит?
Последний раз редактировалось Flasher Вт янв 24, 2012 23:36, всего редактировалось 1 раз.
Аватара пользователя
gora
Сообщения: 442
Зарегистрирован: Чт дек 30, 2004 13:09
Откуда: Иваново

Сообщение gora »

Flasher писал(а):Устроит?
Пока не вижу, ответить не могу.
Win7 SP1 Ultimate x64, TC8.52a x64
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

gora
А зачем видеть? Я родительскую папку процесса сравниваю с %C_P% и проверяю расширение. Если совпало, то это наш ТС.
Samwatas
Сообщения: 95
Зарегистрирован: Сб сен 12, 2009 20:26

Сообщение Samwatas »

Или какой-то левый экзешник (например, инсталлятор), которому не повезло дважды - он лежал в папке %C_P% и запустил vbs-скрипт для определения битности. А тут бац! - его обозвали тоталом и проверяют его битность.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Такого не будет, потому что скрипт поймает первого попавшегося в цепочке, а не абы где.
Samwatas
Сообщения: 95
Зарегистрирован: Сб сен 12, 2009 20:26

Сообщение Samwatas »

Этот горе-экзешник и будет первым попавшимся в цепочке (поскольку именно он запустил скрипт)
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Samwatas
А зачем его ему запускать? Это пользователь определяет, делать ему это или нет.

gora, короче, дело к ночи..

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

' Записать битность TC в файл рядом со скриптом
PTC = CreateObject("WScript.Shell").Environment("Process")("COMMANDER_PATH")
If PTC = "" Then WScript.Quit
Set FSO = CreateObject("Scripting.FileSystemObject")
Set WMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
For Each P in WMI.ExecQuery("SELECT ParentProcessId FROM Win32_Process WHERE ExecutablePath Like '" &_
Replace(WScript.FullName,"\","\\")& "'")
  Parent = P.ParentProcessId
Next
Do Until StrComp(TCP, PTC, 1) = 0 And StrComp(FSO.GetExtensionName(Name), "exe", 1) = 0 And Size > 1000000
  For Each P in WMI.ExecQuery("SELECT Caption, ExecutablePath, ParentProcessId FROM Win32_Process WHERE ProcessId Like " & Parent)
    Name   = P.Caption
    TC     = P.ExecutablePath
    Parent = P.ParentProcessId
  Next
  TCP = FSO.GetParentFolderName(TC)
  Size = FSO.GetFile(TC).Size
Loop
If Size < 7000000 Then Arch = "x32" Else Arch = "x64"
FSO.OpenTextFile(FSO.GetParentFolderName(WScript.ScriptFullName) & "\Arch.txt", 2, True).WriteLine Arch
Set FSO = Nothing : Set WMI = Nothing : WScript.Quit
Последний раз редактировалось Flasher Ср янв 25, 2012 12:56, всего редактировалось 1 раз.
Аватара пользователя
gora
Сообщения: 442
Зарегистрирован: Чт дек 30, 2004 13:09
Откуда: Иваново

Сообщение gora »

Flasher
Добавил в Ваш скрипт строку:

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

MsgBox TC & "," & Arch
в предпоследнюю строчку, положил его НE в папку ТС и запустил:
1 из ком строки ТС, нажав Enter -

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

---------------------------

---------------------------
E:\totalcmd64\Totalcmd64.exe,x64
---------------------------
ОК   
---------------------------
2 из ком строки TC, нажав Shift+Enter -

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

---------------------------

---------------------------
E:\totalcmd64\noclose64.exe,x32
---------------------------
ОК   
---------------------------
Win7 SP1 Ultimate x64, TC8.52a x64
Samwatas
Сообщения: 95
Зарегистрирован: Сб сен 12, 2009 20:26

Сообщение Samwatas »

А разве есть x64 сжатый? Вроде Гислер отказался выпускать в таком виде. Последняя версия - 7.56a.
А что, сжать экзешник может только Гислер? Другие не имеют достаточно знаний, чтобы скачать какой-нить UPX и самому упаковать (например, чтобы тотал занимал меньше места на флешке)?
Короче, подводя итоги:
Один из самых надежных методов - это определять окно тотала по имени класса (причем если у 64бит тотала имя класса отличается от 32битного, то таким образом можно сразу определить и разрядность процесса). Этот метод будет работать и на чистых дистрибутивах тотала и на разнообразных сборках, как бы они ни были модифицированы - можно менять имя экзешника, можно его упаковать UPX-ом, можно менять хаголовок окна разнообразными утилитами (коих целая куча, в том числе написанных специально для тотала) - класс окна будет неизменно показывать, что этот все тот же тотал.
VBS-скрипт требует целый ряд допущений чтобы выполнить ту же задачу (как говорится, "шаг вправо, шаг влево - попытка к бегству").
И, наконец, если допустить, что версия тотала будет 8б10 или выше, то автор справится и сам при помоши батника.
Весь вопрос в том, на какие допущения готов идти автор. Как я уже говорил, если нужен самый надежный метод и при этом хочется небольшой размер экзешника, то ему нужно писать приложение на С/С++ (тут речь будет идти на десятки килобайт, а если сжать, то и на единицы). Например, можно написать консольное приложение, которое будеть возвращать либо 32, либо 64.
Аватара пользователя
gora
Сообщения: 442
Зарегистрирован: Чт дек 30, 2004 13:09
Откуда: Иваново

Сообщение gora »

Samwatas писал(а):если у 64бит тотала имя класса отличается от 32битного
Класс окна одинаков для обеих версий (х64 и х86) - TTOTAL_CMD

Добавлено спустя 5 минут:
Samwatas писал(а):нужно писать приложение на С/С++
Я не программист, написать сам не смогу, а просить это сделать кого-то, специально для моей задачи, не считаю целесообразным.
Всем спасибо. Остановлюсь на варианте батника (с оговорками).

Добавлено спустя 20 минут:
Samwatas писал(а):Один из самых надежных методов - это определять окно тотала по имени класса
Строго говоря окна может и не быть. После запуска инсталлятора выводится окно диалога, может пройти достаточно много времени до запуска скрипта и ни кто не мешает пользователю закрыть окно ТС перед продолжением работы инсталлятора.
Win7 SP1 Ultimate x64, TC8.52a x64
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

gora писал(а):Добавил в Ваш скрипт строку:
В этом нет необходимости, txt-файл всё равно переписывается.
gora писал(а):2 из ком строки TC, нажав Shift+Enter -
Понятно. От консольных приложений можно спастись проверкой размера. Добавил.
Samwatas писал(а):А что, сжать экзешник может только Гислер? Другие не имеют достаточно знаний, чтобы скачать какой-нить UPX и самому упаковать (например, чтобы тотал занимал меньше места на флешке)?
Ок. Тогда просьба выложить сжатый TC8x64.
Samwatas писал(а):Короче, подводя итоги:
Один из самых надежных методов - это определять окно тотала по имени класса (причем если у 64бит тотала имя класса отличается от 32битного
Ага, один из безнадёжных:
gora писал(а):Класс окна одинаков для обеих версий (х64 и х86) - TTOTAL_CMD
Samwatas писал(а):VBS-скрипт требует целый ряд допущений чтобы выполнить ту же задачу (как говорится, "шаг вправо, шаг влево - попытка к бегству").
Какой ряд? Тот, что назван выше для данной задачи неуместен.
AutoIt-скрипт не требует допущений? Взять хотя бы большой размер и кучу библиотек.
Samwatas писал(а):И, наконец, если допустить, что версия тотала будет 8б10 или выше, то автор справится и сам при помоши батника.
Это было понятно ещё с начала топика.
Samwatas писал(а):Например, можно написать консольное приложение, которое будеть возвращать либо 32, либо 64.
Можно и на луну слетать при большом желании. :wink: Если это предложение реализации со своей стороны, то милости просим.
Аватара пользователя
Rodny
Сообщения: 949
Зарегистрирован: Ср янв 24, 2007 00:59
Откуда: Могилёв, Беларусь

Сообщение Rodny »

Samwatas писал(а):А что, сжать экзешник может только Гислер? Другие не имеют достаточно знаний, чтобы скачать какой-нить UPX и самому упаковать (например, чтобы тотал занимал меньше места на флешке)?
Да, только Гислер. Самопроверку тотала никто не отменял:

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

WARNING: The TOTALCMD executable file is corrupted, possible VIRUS!
Totalcmd will close. Please run a virus scanner as soon as possible!
Аватара пользователя
gora
Сообщения: 442
Зарегистрирован: Чт дек 30, 2004 13:09
Откуда: Иваново

Сообщение gora »

Rodny писал(а):Да, только Гислер.
Сомневаюсь, что даже он сможет сделать TC x64 упакованным UPX-ом, ибо UPX не работает с x64 приложениями! ;)
Win7 SP1 Ultimate x64, TC8.52a x64
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

gora
Я поэтому и попросил упакованный файл. :wink:
Так что, вариант подошёл?
Аватара пользователя
gora
Сообщения: 442
Зарегистрирован: Чт дек 30, 2004 13:09
Откуда: Иваново

Сообщение gora »

Flasher писал(а):Так что, вариант подощёл?
Я и не знал, что Вы что-то меняли и потом я уже писал
gora писал(а):Остановлюсь на варианте батника (с оговорками).
Новый инсталлятор уже сделан и выложен в паблик.
Win7 SP1 Ultimate x64, TC8.52a x64
Ответить