View previous topic :: View next topic |
Author |
Message |
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Tue Jan 24, 2012 23:33 Post subject: |
|
|
gora
Ну почему же сомнительно? Кто-то привык к тому имени, у кого-то пути в командах, кнопках, ключах wincmd.ini прямые указаны, причин хватает.
В общем, я пока только одно могу предложить. %COMMANDER_PATH% + exe. По логике никто не будет там держать exe-файлы, из которых будет запускаться ТС. Устроит?
Last edited by Flasher on Tue Jan 24, 2012 23:36; edited 1 time in total |
|
Back to top |
|
|
gora
Joined: 30 Dec 2004 Posts: 442 Location: Иваново
|
(Separately) Posted: Tue Jan 24, 2012 23:36 Post subject: |
|
|
Пока не вижу, ответить не могу. _________________ Win7 SP1 Ultimate x64, TC8.52a x64 |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Tue Jan 24, 2012 23:38 Post subject: |
|
|
gora
А зачем видеть? Я родительскую папку процесса сравниваю с %C_P% и проверяю расширение. Если совпало, то это наш ТС. |
|
Back to top |
|
|
Samwatas
Joined: 12 Sep 2009 Posts: 95
|
(Separately) Posted: Tue Jan 24, 2012 23:53 Post subject: |
|
|
Или какой-то левый экзешник (например, инсталлятор), которому не повезло дважды - он лежал в папке %C_P% и запустил vbs-скрипт для определения битности. А тут бац! - его обозвали тоталом и проверяют его битность. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Wed Jan 25, 2012 00:00 Post subject: |
|
|
Такого не будет, потому что скрипт поймает первого попавшегося в цепочке, а не абы где. |
|
Back to top |
|
|
Samwatas
Joined: 12 Sep 2009 Posts: 95
|
(Separately) Posted: Wed Jan 25, 2012 00:06 Post subject: |
|
|
Этот горе-экзешник и будет первым попавшимся в цепочке (поскольку именно он запустил скрипт) |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Wed Jan 25, 2012 00:14 Post subject: |
|
|
Samwatas
А зачем его ему запускать? Это пользователь определяет, делать ему это или нет.
gora, короче, дело к ночи.. Code: | ' Записать битность 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 |
Last edited by Flasher on Wed Jan 25, 2012 12:56; edited 1 time in total |
|
Back to top |
|
|
gora
Joined: 30 Dec 2004 Posts: 442 Location: Иваново
|
(Separately) Posted: Wed Jan 25, 2012 08:35 Post subject: |
|
|
Flasher
Добавил в Ваш скрипт строку: Code: | MsgBox TC & "," & Arch | в предпоследнюю строчку, положил его НE в папку ТС и запустил:
1 из ком строки ТС, нажав Enter - Code: | ---------------------------
---------------------------
E:\totalcmd64\Totalcmd64.exe,x64
---------------------------
ОК
---------------------------
|
2 из ком строки TC, нажав Shift+Enter - Code: | ---------------------------
---------------------------
E:\totalcmd64\noclose64.exe,x32
---------------------------
ОК
---------------------------
|
_________________ Win7 SP1 Ultimate x64, TC8.52a x64 |
|
Back to top |
|
|
Samwatas
Joined: 12 Sep 2009 Posts: 95
|
(Separately) Posted: Wed Jan 25, 2012 09:11 Post subject: |
|
|
Quote: | А разве есть x64 сжатый? Вроде Гислер отказался выпускать в таком виде. Последняя версия - 7.56a. |
А что, сжать экзешник может только Гислер? Другие не имеют достаточно знаний, чтобы скачать какой-нить UPX и самому упаковать (например, чтобы тотал занимал меньше места на флешке)?
Короче, подводя итоги:
Один из самых надежных методов - это определять окно тотала по имени класса (причем если у 64бит тотала имя класса отличается от 32битного, то таким образом можно сразу определить и разрядность процесса). Этот метод будет работать и на чистых дистрибутивах тотала и на разнообразных сборках, как бы они ни были модифицированы - можно менять имя экзешника, можно его упаковать UPX-ом, можно менять хаголовок окна разнообразными утилитами (коих целая куча, в том числе написанных специально для тотала) - класс окна будет неизменно показывать, что этот все тот же тотал.
VBS-скрипт требует целый ряд допущений чтобы выполнить ту же задачу (как говорится, "шаг вправо, шаг влево - попытка к бегству").
И, наконец, если допустить, что версия тотала будет 8б10 или выше, то автор справится и сам при помоши батника.
Весь вопрос в том, на какие допущения готов идти автор. Как я уже говорил, если нужен самый надежный метод и при этом хочется небольшой размер экзешника, то ему нужно писать приложение на С/С++ (тут речь будет идти на десятки килобайт, а если сжать, то и на единицы). Например, можно написать консольное приложение, которое будеть возвращать либо 32, либо 64. |
|
Back to top |
|
|
gora
Joined: 30 Dec 2004 Posts: 442 Location: Иваново
|
(Separately) Posted: Wed Jan 25, 2012 09:24 Post subject: |
|
|
Samwatas wrote: | если у 64бит тотала имя класса отличается от 32битного |
Класс окна одинаков для обеих версий (х64 и х86) - TTOTAL_CMD
Добавлено спустя 5 минут:
Samwatas wrote: | нужно писать приложение на С/С++ |
Я не программист, написать сам не смогу, а просить это сделать кого-то, специально для моей задачи, не считаю целесообразным.
Всем спасибо. Остановлюсь на варианте батника (с оговорками).
Добавлено спустя 20 минут:
Samwatas wrote: | Один из самых надежных методов - это определять окно тотала по имени класса |
Строго говоря окна может и не быть. После запуска инсталлятора выводится окно диалога, может пройти достаточно много времени до запуска скрипта и ни кто не мешает пользователю закрыть окно ТС перед продолжением работы инсталлятора. _________________ Win7 SP1 Ultimate x64, TC8.52a x64 |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Wed Jan 25, 2012 12:58 Post subject: |
|
|
gora wrote: | Добавил в Ваш скрипт строку: | В этом нет необходимости, txt-файл всё равно переписывается.
gora wrote: | 2 из ком строки TC, нажав Shift+Enter - | Понятно. От консольных приложений можно спастись проверкой размера. Добавил.
Samwatas wrote: | А что, сжать экзешник может только Гислер? Другие не имеют достаточно знаний, чтобы скачать какой-нить UPX и самому упаковать (например, чтобы тотал занимал меньше места на флешке)? | Ок. Тогда просьба выложить сжатый TC8x64.
Samwatas wrote: | Короче, подводя итоги:
Один из самых надежных методов - это определять окно тотала по имени класса (причем если у 64бит тотала имя класса отличается от 32битного | Ага, один из безнадёжных: gora wrote: | Класс окна одинаков для обеих версий (х64 и х86) - TTOTAL_CMD |
Samwatas wrote: | VBS-скрипт требует целый ряд допущений чтобы выполнить ту же задачу (как говорится, "шаг вправо, шаг влево - попытка к бегству"). | Какой ряд? Тот, что назван выше для данной задачи неуместен.
AutoIt-скрипт не требует допущений? Взять хотя бы большой размер и кучу библиотек.
Samwatas wrote: | И, наконец, если допустить, что версия тотала будет 8б10 или выше, то автор справится и сам при помоши батника. | Это было понятно ещё с начала топика.
Samwatas wrote: | Например, можно написать консольное приложение, которое будеть возвращать либо 32, либо 64. | Можно и на луну слетать при большом желании. Если это предложение реализации со своей стороны, то милости просим. |
|
Back to top |
|
|
Rodny
Joined: 24 Jan 2007 Posts: 949 Location: Могилёв, Беларусь
|
(Separately) Posted: Wed Jan 25, 2012 18:12 Post subject: |
|
|
Samwatas wrote: | А что, сжать экзешник может только Гислер? Другие не имеют достаточно знаний, чтобы скачать какой-нить UPX и самому упаковать (например, чтобы тотал занимал меньше места на флешке)? |
Да, только Гислер. Самопроверку тотала никто не отменял:
Code: | WARNING: The TOTALCMD executable file is corrupted, possible VIRUS!
Totalcmd will close. Please run a virus scanner as soon as possible! |
|
|
Back to top |
|
|
gora
Joined: 30 Dec 2004 Posts: 442 Location: Иваново
|
(Separately) Posted: Wed Jan 25, 2012 18:25 Post subject: |
|
|
Rodny wrote: | Да, только Гислер. |
Сомневаюсь, что даже он сможет сделать TC x64 упакованным UPX-ом, ибо UPX не работает с x64 приложениями! _________________ Win7 SP1 Ultimate x64, TC8.52a x64 |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Wed Jan 25, 2012 18:30 Post subject: |
|
|
gora
Я поэтому и попросил упакованный файл.
Так что, вариант подошёл? |
|
Back to top |
|
|
gora
Joined: 30 Dec 2004 Posts: 442 Location: Иваново
|
(Separately) Posted: Wed Jan 25, 2012 18:41 Post subject: |
|
|
Flasher wrote: | Так что, вариант подощёл? |
Я и не знал, что Вы что-то меняли и потом я уже писал gora wrote: | Остановлюсь на варианте батника (с оговорками). |
Новый инсталлятор уже сделан и выложен в паблик. _________________ Win7 SP1 Ultimate x64, TC8.52a x64 |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|