Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Определить разрядность запущенного TC
Goto page Previous  1, 2, 3, 4, 5, 6, 7, 8, 9  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Tue Jan 24, 2012 23:33    Post subject: Reply with quote

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
View user's profile Send private message
gora



Joined: 30 Dec 2004
Posts: 442
Location: Иваново

Post (Separately) Posted: Tue Jan 24, 2012 23:36    Post subject: Reply with quote

Flasher wrote:
Устроит?

Пока не вижу, ответить не могу.
_________________
Win7 SP1 Ultimate x64, TC8.52a x64
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Tue Jan 24, 2012 23:38    Post subject: Reply with quote

gora
А зачем видеть? Я родительскую папку процесса сравниваю с %C_P% и проверяю расширение. Если совпало, то это наш ТС.
Back to top
View user's profile Send private message
Samwatas



Joined: 12 Sep 2009
Posts: 95

Post (Separately) Posted: Tue Jan 24, 2012 23:53    Post subject: Reply with quote

Или какой-то левый экзешник (например, инсталлятор), которому не повезло дважды - он лежал в папке %C_P% и запустил vbs-скрипт для определения битности. А тут бац! - его обозвали тоталом и проверяют его битность.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Wed Jan 25, 2012 00:00    Post subject: Reply with quote

Такого не будет, потому что скрипт поймает первого попавшегося в цепочке, а не абы где.
Back to top
View user's profile Send private message
Samwatas



Joined: 12 Sep 2009
Posts: 95

Post (Separately) Posted: Wed Jan 25, 2012 00:06    Post subject: Reply with quote

Этот горе-экзешник и будет первым попавшимся в цепочке (поскольку именно он запустил скрипт)
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Wed Jan 25, 2012 00:14    Post subject: Reply with quote

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
View user's profile Send private message
gora



Joined: 30 Dec 2004
Posts: 442
Location: Иваново

Post (Separately) Posted: Wed Jan 25, 2012 08:35    Post subject: Reply with quote

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
View user's profile Send private message
Samwatas



Joined: 12 Sep 2009
Posts: 95

Post (Separately) Posted: Wed Jan 25, 2012 09:11    Post subject: Reply with quote

Quote:
А разве есть x64 сжатый? Вроде Гислер отказался выпускать в таком виде. Последняя версия - 7.56a.

А что, сжать экзешник может только Гислер? Другие не имеют достаточно знаний, чтобы скачать какой-нить UPX и самому упаковать (например, чтобы тотал занимал меньше места на флешке)?
Короче, подводя итоги:
Один из самых надежных методов - это определять окно тотала по имени класса (причем если у 64бит тотала имя класса отличается от 32битного, то таким образом можно сразу определить и разрядность процесса). Этот метод будет работать и на чистых дистрибутивах тотала и на разнообразных сборках, как бы они ни были модифицированы - можно менять имя экзешника, можно его упаковать UPX-ом, можно менять хаголовок окна разнообразными утилитами (коих целая куча, в том числе написанных специально для тотала) - класс окна будет неизменно показывать, что этот все тот же тотал.
VBS-скрипт требует целый ряд допущений чтобы выполнить ту же задачу (как говорится, "шаг вправо, шаг влево - попытка к бегству").
И, наконец, если допустить, что версия тотала будет 8б10 или выше, то автор справится и сам при помоши батника.
Весь вопрос в том, на какие допущения готов идти автор. Как я уже говорил, если нужен самый надежный метод и при этом хочется небольшой размер экзешника, то ему нужно писать приложение на С/С++ (тут речь будет идти на десятки килобайт, а если сжать, то и на единицы). Например, можно написать консольное приложение, которое будеть возвращать либо 32, либо 64.
Back to top
View user's profile Send private message
gora



Joined: 30 Dec 2004
Posts: 442
Location: Иваново

Post (Separately) Posted: Wed Jan 25, 2012 09:24    Post subject: Reply with quote

Samwatas wrote:
если у 64бит тотала имя класса отличается от 32битного

Класс окна одинаков для обеих версий (х64 и х86) - TTOTAL_CMD

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

Samwatas wrote:
нужно писать приложение на С/С++

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

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

Samwatas wrote:
Один из самых надежных методов - это определять окно тотала по имени класса

Строго говоря окна может и не быть. После запуска инсталлятора выводится окно диалога, может пройти достаточно много времени до запуска скрипта и ни кто не мешает пользователю закрыть окно ТС перед продолжением работы инсталлятора.
_________________
Win7 SP1 Ultimate x64, TC8.52a x64
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Wed Jan 25, 2012 12:58    Post subject: Reply with quote

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.
Можно и на луну слетать при большом желании. Wink Если это предложение реализации со своей стороны, то милости просим.
Back to top
View user's profile Send private message
Rodny



Joined: 24 Jan 2007
Posts: 949
Location: Могилёв, Беларусь

Post (Separately) Posted: Wed Jan 25, 2012 18:12    Post subject: Reply with quote

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
View user's profile Send private message
gora



Joined: 30 Dec 2004
Posts: 442
Location: Иваново

Post (Separately) Posted: Wed Jan 25, 2012 18:25    Post subject: Reply with quote

Rodny wrote:
Да, только Гислер.

Сомневаюсь, что даже он сможет сделать TC x64 упакованным UPX-ом, ибо UPX не работает с x64 приложениями! Wink
_________________
Win7 SP1 Ultimate x64, TC8.52a x64
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Wed Jan 25, 2012 18:30    Post subject: Reply with quote

gora
Я поэтому и попросил упакованный файл. Wink
Так что, вариант подошёл?
Back to top
View user's profile Send private message
gora



Joined: 30 Dec 2004
Posts: 442
Location: Иваново

Post (Separately) Posted: Wed Jan 25, 2012 18:41    Post subject: Reply with quote

Flasher wrote:
Так что, вариант подощёл?

Я и не знал, что Вы что-то меняли и потом я уже писал
gora wrote:
Остановлюсь на варианте батника (с оговорками).

Новый инсталлятор уже сделан и выложен в паблик.
_________________
Win7 SP1 Ultimate x64, TC8.52a x64
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Goto page Previous  1, 2, 3, 4, 5, 6, 7, 8, 9  Next
Page 8 of 9

 
Jump to:  
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