Определить разрядность запущенного TC
Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер
gora
Ну почему же сомнительно? Кто-то привык к тому имени, у кого-то пути в командах, кнопках, ключах wincmd.ini прямые указаны, причин хватает.
В общем, я пока только одно могу предложить. %COMMANDER_PATH% + exe. По логике никто не будет там держать exe-файлы, из которых будет запускаться ТС. Устроит?
Ну почему же сомнительно? Кто-то привык к тому имени, у кого-то пути в командах, кнопках, ключах wincmd.ini прямые указаны, причин хватает.
В общем, я пока только одно могу предложить. %COMMANDER_PATH% + exe. По логике никто не будет там держать exe-файлы, из которых будет запускаться ТС. Устроит?
Последний раз редактировалось Flasher Вт янв 24, 2012 23:36, всего редактировалось 1 раз.
Samwatas
А зачем его ему запускать? Это пользователь определяет, делать ему это или нет.
gora, короче, дело к ночи..
А зачем его ему запускать? Это пользователь определяет, делать ему это или нет.
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 раз.
Flasher
Добавил в Ваш скрипт строку:в предпоследнюю строчку, положил его НE в папку ТС и запустил:
1 из ком строки ТС, нажав Enter -
2 из ком строки TC, нажав Shift+Enter -
Добавил в Ваш скрипт строку:
Код: Выделить всё
MsgBox TC & "," & Arch1 из ком строки ТС, нажав Enter -
Код: Выделить всё
---------------------------
---------------------------
E:\totalcmd64\Totalcmd64.exe,x64
---------------------------
ОК
---------------------------
Код: Выделить всё
---------------------------
---------------------------
E:\totalcmd64\noclose64.exe,x32
---------------------------
ОК
---------------------------
Win7 SP1 Ultimate x64, TC8.52a x64
А что, сжать экзешник может только Гислер? Другие не имеют достаточно знаний, чтобы скачать какой-нить UPX и самому упаковать (например, чтобы тотал занимал меньше места на флешке)?А разве есть x64 сжатый? Вроде Гислер отказался выпускать в таком виде. Последняя версия - 7.56a.
Короче, подводя итоги:
Один из самых надежных методов - это определять окно тотала по имени класса (причем если у 64бит тотала имя класса отличается от 32битного, то таким образом можно сразу определить и разрядность процесса). Этот метод будет работать и на чистых дистрибутивах тотала и на разнообразных сборках, как бы они ни были модифицированы - можно менять имя экзешника, можно его упаковать UPX-ом, можно менять хаголовок окна разнообразными утилитами (коих целая куча, в том числе написанных специально для тотала) - класс окна будет неизменно показывать, что этот все тот же тотал.
VBS-скрипт требует целый ряд допущений чтобы выполнить ту же задачу (как говорится, "шаг вправо, шаг влево - попытка к бегству").
И, наконец, если допустить, что версия тотала будет 8б10 или выше, то автор справится и сам при помоши батника.
Весь вопрос в том, на какие допущения готов идти автор. Как я уже говорил, если нужен самый надежный метод и при этом хочется небольшой размер экзешника, то ему нужно писать приложение на С/С++ (тут речь будет идти на десятки килобайт, а если сжать, то и на единицы). Например, можно написать консольное приложение, которое будеть возвращать либо 32, либо 64.
Класс окна одинаков для обеих версий (х64 и х86) - TTOTAL_CMDSamwatas писал(а):если у 64бит тотала имя класса отличается от 32битного
Добавлено спустя 5 минут:
Я не программист, написать сам не смогу, а просить это сделать кого-то, специально для моей задачи, не считаю целесообразным.Samwatas писал(а):нужно писать приложение на С/С++
Всем спасибо. Остановлюсь на варианте батника (с оговорками).
Добавлено спустя 20 минут:
Строго говоря окна может и не быть. После запуска инсталлятора выводится окно диалога, может пройти достаточно много времени до запуска скрипта и ни кто не мешает пользователю закрыть окно ТС перед продолжением работы инсталлятора.Samwatas писал(а):Один из самых надежных методов - это определять окно тотала по имени класса
Win7 SP1 Ultimate x64, TC8.52a x64
В этом нет необходимости, txt-файл всё равно переписывается.gora писал(а):Добавил в Ваш скрипт строку:
Понятно. От консольных приложений можно спастись проверкой размера. Добавил.gora писал(а):2 из ком строки TC, нажав Shift+Enter -
Ок. Тогда просьба выложить сжатый TC8x64.Samwatas писал(а):А что, сжать экзешник может только Гислер? Другие не имеют достаточно знаний, чтобы скачать какой-нить UPX и самому упаковать (например, чтобы тотал занимал меньше места на флешке)?
Ага, один из безнадёжных:Samwatas писал(а):Короче, подводя итоги:
Один из самых надежных методов - это определять окно тотала по имени класса (причем если у 64бит тотала имя класса отличается от 32битного
gora писал(а):Класс окна одинаков для обеих версий (х64 и х86) - TTOTAL_CMD
Какой ряд? Тот, что назван выше для данной задачи неуместен.Samwatas писал(а):VBS-скрипт требует целый ряд допущений чтобы выполнить ту же задачу (как говорится, "шаг вправо, шаг влево - попытка к бегству").
AutoIt-скрипт не требует допущений? Взять хотя бы большой размер и кучу библиотек.
Это было понятно ещё с начала топика.Samwatas писал(а):И, наконец, если допустить, что версия тотала будет 8б10 или выше, то автор справится и сам при помоши батника.
Можно и на луну слетать при большом желании.Samwatas писал(а):Например, можно написать консольное приложение, которое будеть возвращать либо 32, либо 64.
Да, только Гислер. Самопроверку тотала никто не отменял:Samwatas писал(а):А что, сжать экзешник может только Гислер? Другие не имеют достаточно знаний, чтобы скачать какой-нить UPX и самому упаковать (например, чтобы тотал занимал меньше места на флешке)?
Код: Выделить всё
WARNING: The TOTALCMD executable file is corrupted, possible VIRUS!
Totalcmd will close. Please run a virus scanner as soon as possible!