Показать полную графическую версию : [решено] Как запустить .exe в зашифрованном архиве ?
Всем добрый день !
Помогите пожалуйста решить проблемку.
Есть сценарий :
копирует из зашифрованного архива 40.rar файл 40.exe в текущую папку . fGzq5yKw - пароль.
RunWait ( @ComSpec & " /c " & 'start winrar.exe e -hpfGzq5yKw 40.rar 40.exe'," ", @SW_HIDE)
Как запустить файл 40.exe на исполнение прямо в зашифрованном архиве, те без копирования?
файлы нельзя запустить на исполнение из архива
apozlevich
14-01-2012, 12:44
ferget имеет в виду то, что в любом случае содержимое архива надо куда-нибудь распаковать, например в @TempDir
Спасибо что поправили, неточно сформулировал вопрос.
Надо так :
1. Скрипт открывает зашифрованный архив ;
2. Инициирует 40.exe , который распаковывает во временную папку
C:\Documents and Settings\Admin\Local Settings\Temp ;
3. Когда 40.exe заканчивает работу, то 40.exe удаляется.
Так работает WinRar . Это мне понятно.
Только немогу найти решения как заставить запуститься 40.exe
apozlevich
14-01-2012, 13:49
pekich, попробуйте другую директорию распаковки.
Дело сейчас не в директории.
Прошу помощи примером.
apozlevich
14-01-2012, 14:03
А вы попробуйте :) WinRAR не должен удалять этот файл, тем более дожидаться, пока он выполнится.
Уточните.
Вы имеете ввиду работу незашифрованного или шифрованного архива?
apozlevich
14-01-2012, 14:16
Да вроде в любом случае не должен удаляться распакованный файл.
Нешифрованный архив :
1. открываем архив двойным кликом и видим 40.exe ;
2. двойным кликом инициируем 40.exe , например это сообщение MsgBox .
Соответственно Вы видите его своими глазами.
3. Переходим в паку \Temp\_tc - папку _tc создал WinRar и распаковал в нее 40.exe.
Это тоже видно глазами.
4. Закрываем сообщение MsgBox , тогда файл 40.exe удаляется, а папка _tc остается.
Так по умолчанию работает WinRar.
Те здесь можно войти в архив , увидеть exe и жмакнуть на него. Или программным способом обратиться к папке \Temp\_tc , выбрать файл и совершить с ним действие.
Шифрованный архив :
Ситуация иная.
Открыть можно без пароля и ничего не увидешь, тк с ключом -hp получается что один пароль назначен :
на архив и на имя архивного файла.
На что жмакать если ничего невидно и пароль надо?
Для распаковки нашел две команды E и X - обе только копируют.
Вопрос : можно ли в одной строчке моего или другого кода прописать куда распаковать и сразу запустить exe?
apozlevich
14-01-2012, 15:06
Нешифрованный архив :
1. открываем архив двойным кликом и видим 40.exe ;
2. двойным кликом инициируем 40.exe , например это сообщение MsgBox .
Соответственно Вы видите его своими глазами.
3. Переходим в паку \Temp\_tc - папку _tc создал WinRar и распаковал в нее 40.exe.
Это тоже видно глазами.
4. Закрываем сообщение MsgBox , тогда файл 40.exe удаляется, а папка _tc остается. »
WinRAR распаковывает все в темп что-бы "предпросмотреть" файл, по которому вы кликаете. После закрытия подразумевается, что файл больше не нужен пользователю и он удаляет его.
Я так понял, вам надо распаковать и запустить файл?RunWait ( @ComSpec & " /c " & 'start winrar.exe e -hpfGzq5yKw 40.rar 40.exe'," ", @SW_HIDE) ; Это ваш код, мне команда кажется слишком запутанной
RunWait(<путь к папке распаковки>\40.exe)
А можно просто сделать SFX-архив, который это будет делать сам.
SFX-архив для моих целей не подходит.
Приведите пожалуйста код, который не запутан. Очень любопытно.
И прошу объяснить что значит в коде следующее:
" /c " ; , " ", .
apozlevich
14-01-2012, 15:23
SFX-архив для моих целей не подходит. »
SFX архив как раз умеет разархивировать и запускать. То что вы делаете, будет работать только на системах с установленным WinRAR.
И прошу объяснить что значит в коде следующее:
" /c " ; , " ", . »
Это же ваш код :)
RunWait - "Запустить внешнюю программу, ожидать момента окончания ее работы, после чего продолжить выполнение скрипта."
@ComSpec - переменная среды %COMSPEC% (У меня I:\WINDOWS\system32\cmd.exe), запуск обработчика команд.
/c - "Выполнение указанной команды (строки) с последующим завершением."
start - команда start для запуска программы, можно обойтись и без нее, если только не нужен /wait (что не нужно, так как используется RunWait)
Почему бы не сделать проще?
RunWait('winrar.exe e -hpfGzq5yKw 40.rar 40.exe', '', @SW_HIDE)
Спасибо за ликбез.
1.
Это не мой код , из справки по AutoIt подглядел.
Еще уточните пожалуйста, верно ли я понял :
" /c " - это команда командной строки , то что применяется в bat и cmd файлах ;
, " " , - в коде есть пустые кавычки, они не для указания пути распаковки архива ?
2.
Ваш код не работает.
Может Вы эту конструкцию имели ввиду ?
#Include <process.au3>
_RunDOS( $sCommand )
apozlevich
14-01-2012, 15:45
" /c " - это команда командной строки , то что применяется в bat и cmd файлах ; »
Да, это аргумент для cmd.
Да, мой код не работает потому, что надо указать путь к winrar.exe
Пустые кавычки - это пустые аргументы функции AutoIt, для числовых аргументов обычно подходит -1.
Спасибо за ликбез. »
Снизу всех сообщений снизу есть кнопка "Полезное сообщение"
Поместил скрипт с Вашим кодом в папку установленного WinRar, чтобы путь не вводить. Работает.
Только окно WinRar при распаковке мелькает, и путь надо указывать явный. Не есть гуд.
Код из учебника лучше : окна рара невидно и скрипт работает из любой папки операционки.
Вы предложили код :
RunWait ( @ComSpec & " /c " & 'start winrar.exe e -hpfGzq5yKw 40.rar 40.exe'," ", @SW_HIDE) ;
RunWait(<путь к папке распаковки>\40.exe)
Но прежде чем выполнить
RunWait(<путь к папке распаковки>\40.exe)
Надо знать путь, куда был распакован 40.exe.
Вопрос: где и как в конструкции
RunWait ( @ComSpec & " /c " & 'start winrar.exe e -hpfGzq5yKw 40.rar 40.exe'," ", @SW_HIDE) ;
прописать путь к папке распаковки ?
apozlevich
14-01-2012, 16:17
Это уже к документации по WinRAR, я не разбираюсь, так как пользуюсь 7-Zip
Разобрался с документацией WinRar.
Шифрованный файл 40.exe может распаковаться только в текущую папку.
Те нельзя его расшифровать не в текущую папку и сразу запустить на исполнение.
Потом с этим файлом можно делать все что надо.
В данном примере ( apozlevich, пост 11 ), в <путь к папке распаковки> нужен путь к текущей папке распаковки архивного файла.
RunWait ( @ComSpec & " /c " & 'start winrar.exe e -hpfGzq5yKw 40.rar 40.exe'," ", @SW_HIDE) ;
RunWait(<путь к папке распаковки>\40.exe)
Спасибо. Тема решена.
Turbo999
24-12-2021, 11:32
подскажите как вы решили эту проблему
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.