Войти

Показать полную графическую версию : [решено] Как запустить .exe в зашифрованном архиве ?


pekich
14-01-2012, 10:55
Всем добрый день !

Помогите пожалуйста решить проблемку.

Есть сценарий :
копирует из зашифрованного архива 40.rar файл 40.exe в текущую папку . fGzq5yKw - пароль.

RunWait ( @ComSpec & " /c " & 'start winrar.exe e -hpfGzq5yKw 40.rar 40.exe'," ", @SW_HIDE)

Как запустить файл 40.exe на исполнение прямо в зашифрованном архиве, те без копирования?

ferget
14-01-2012, 11:59
файлы нельзя запустить на исполнение из архива

apozlevich
14-01-2012, 12:44
ferget имеет в виду то, что в любом случае содержимое архива надо куда-нибудь распаковать, например в @TempDir

pekich
14-01-2012, 13:47
Спасибо что поправили, неточно сформулировал вопрос.

Надо так :
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, попробуйте другую директорию распаковки.

pekich
14-01-2012, 14:01
Дело сейчас не в директории.

Прошу помощи примером.

apozlevich
14-01-2012, 14:03
А вы попробуйте :) WinRAR не должен удалять этот файл, тем более дожидаться, пока он выполнится.

pekich
14-01-2012, 14:14
Уточните.
Вы имеете ввиду работу незашифрованного или шифрованного архива?

apozlevich
14-01-2012, 14:16
Да вроде в любом случае не должен удаляться распакованный файл.

pekich
14-01-2012, 14:59
Нешифрованный архив :
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-архив, который это будет делать сам.

pekich
14-01-2012, 15:14
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)

pekich
14-01-2012, 15:43
Спасибо за ликбез.
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.

Спасибо за ликбез. »
Снизу всех сообщений снизу есть кнопка "Полезное сообщение"

pekich
14-01-2012, 16:15
Поместил скрипт с Вашим кодом в папку установленного 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

pekich
16-01-2012, 12:12
Разобрался с документацией 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
подскажите как вы решили эту проблему

Iska
25-12-2021, 02:15
Какую именно?




© OSzone.net 2001-2012