Что нового

запуск кода autoit из скомпилированного скрипта без записи на диск

liond66

Новичок
Сообщения
117
Репутация
2
Здравствуйте.
Наверное такое не получиться, но я всё же спрошу.
Скомпилированный скрипт создаёт скрипт autoit и должен его запустить.
Но не создавая файл кода на диске!
Или скомпилировать и запустить. Но опять же, не создавая файл кода на диске.
Файл exe можно записать на диск.

Если создавать файл, то это выглядит примерно так:
Код:
#pragma compile(AutoItExecuteAllowed, True)
$File = FileOpen(@ScriptDir & "\script.au3", 2+8)
FileWriteLine($File, "MsgBox(0,'','First line')")
FileWriteLine($File, "MsgBox(0,'','Second line')")
FileClose($File)
Run('"' & @AutoItExe & '" /AutoIt3ExecuteScript "' & @ScriptDir & '\Script.au3"')


Начало как-то так, а дальше?
Код:
$Data = "MsgBox(0,'','First line')" & @CRLF
$Data &= "MsgBox(0,'','Second line')"
 
Последнее редактирование:

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
можно запустить исходный код самим экзешником, можно запустить другой экзешник считав его в память.
смысл запуска каков? зачем создавать еще код?
 
Автор
L

liond66

Новичок
Сообщения
117
Репутация
2
Экзешник на autoit в зависимости от условий создаёт код, включая вводимые пользователем данные, который будет использоваться несколько раз.
Код нужно скрыть, чтобы не могли изменить: ни код, ни пользовательские данные.
Нужно генерировать в памяти и запускать, либо генерировать в памяти и компилировать.
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
запуск только после компиляции на диске. в памяти можно запустить коды в которых нет подключаемых библиотек
пример
Код:
Execute("MsgBox(0,'','MSG')")

естественно, строка может быть длиннее
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
@liond66 Пользовательские данные можно зашифровать
Код:
#include <Crypt.au3>

$Alg = $CALG_RC4 ; см. _Crypt_DeriveKey в справке
$Key = "CryptKey_Password" ; ключ шифрования (пароль)
$Path = "data.bin" ; путь к файлу

_Crypt_Startup()

GUICreate("Crypt")
$Inp1 = GUICtrlCreateInput("", 10, 10, 380)
$Inp2 = GUICtrlCreateInput("", 10, 40, 380)
$Edit = GUICtrlCreateEdit ("", 10, 70, 380, 290)
$Save = GUICtrlCreateButton("Сохранить",  10, 365, 100)
$Clear= GUICtrlCreateButton("Очистить" , 110, 365, 100)
$Load = GUICtrlCreateButton("Загрузить", 210, 365, 100)
GUISetState()

Do
  Switch GUIGetMsg()
    Case -3
      ExitLoop
    Case $Save
      $Crypt1 = _Crypt_EncryptData(GUICtrlRead($Inp1), $Key, $Alg)
      $Crypt2 = _Crypt_EncryptData(GUICtrlRead($Inp2), $Key, $Alg)
      $Crypt3 = _Crypt_EncryptData(GUICtrlRead($Edit), $Key, $Alg)
      $File = FileOpen($Path, 2)
      FileWrite($File, $Crypt1 & "|" & $Crypt2 & "|" & $Crypt3)
      FileClose($File)
      ; $_ = ConsoleWrite($Crypt1 & @CRLF) & ConsoleWrite($Crypt2 & @CRLF) & ConsoleWrite($Crypt3 & @CRLF)
    Case $Clear
      GUICtrlSetData($Inp1, "")
      GUICtrlSetData($Inp2, "")
      GUICtrlSetData($Edit, "")
    Case $Load
      If Not FileExists($Path) Then ContinueLoop
      $Data = StringSplit(FileRead($Path), "|")
      If $Data[0] < 3 Then ReDim $Data[4]
      GUICtrlSetData($Inp1, BinaryToString(_Crypt_DecryptData($Data[1], $Key, $Alg)))
      GUICtrlSetData($Inp2, BinaryToString(_Crypt_DecryptData($Data[2], $Key, $Alg)))
      GUICtrlSetData($Edit, BinaryToString(_Crypt_DecryptData($Data[3], $Key, $Alg)))
  EndSwitch
Until 0

_Crypt_Shutdown()
 
Автор
L

liond66

Новичок
Сообщения
117
Репутация
2
Спасибо, но это не то, пока.
Сообщение автоматически объединено:

Вот Здесь ув. Yashied объясняет условия для компиляции (пост 6).
Вопрос, можно ли найти способ вместо файла компилятору дать переменную???
Может есть альтернативный компилятор, который сделает это?
 
Последнее редактирование:
Верх