Что нового

Файловая система Скомпилированный скрипт не видит переменные с внешнего файла

eus_deus

Новичок
Сообщения
118
Репутация
0
Добрый вечер!
Есть скрипт и внешний файл с командами.
Команды выполняются построчно функцией Execute
В исходном коде все работает как надо.
Скомпилированный вариант - не работает. Функция определения переменных, нужных для работы дальнейших команд, не срабатывает
То есть цепь
Скрипт------Execute-----Внешний файл------Переменные в скрипте------Внешний файл
не срабатывает.
Все переменные Global
Точнее рассказать возможности нет, к скрипту для показания наглядно пока тоже нет доступа.
Как можно выйти с положения?
Только через временный файл?
 

joiner

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

eus_deus

Новичок
Сообщения
118
Репутация
0
Ситуацию я объяснил, команда execute. Сомневаюсь, что код поможет. Может, набросаю подобие и выложу, чтобы чисто указать проблему. Хотя, по той цепи, по которой указано, и так ясно, что ничего работать не будет

Итак, набросал примерно, как оно выглядит. Это только ход мыслей, может что и упустил в сравнении с оригиналом, я не помню всего.
Повторюсь, в виде кода все работает. Нет работы только на скомпилированном варианте.
Сам скрипт:
Код:
Global $sF = @ScriptDir&'\test.abc'
Global $test1 = 'Any text'
Global $test2 = '32434'
Global $test3, $test4, $test5
_shell('test')

Func _shell($sSect)
    Local  $sSF, $aOF,$sOF
    $sOF = FileRead($sF)
    $sSF = _SectionText($sOF, $sSect, 3)
    $aOF = StringSplit($sSF, @CR)
    For $i=1 To $aOF[0]
        If $aOF[$i] ='' Then ContinueLoop 
        Execute (StringStripWS ($aOF[$i], 3))
    Next
EndFunc

Func _SectionText($sTxt, $sSect, $sm)
    Switch $sm
        Case 1 ; удаление секции из ini файла
            Return StringRegExpReplace($sTxt, '(?mi)^\Q[' & $sSect & ']\E[\r\n]+(?:[^[\r\n].*(?:[\r\n]+|$))*', '')
        Case 2 ; получение секции с заголовком
            Return StringRegExp($sTxt, '(?mi)^\Q[' & $sSect & ']\E[\r\n]+(?:[^[\r\n].*(?:[\r\n]+|$))*', 3)[0]
        Case 3 ; получение секции без заголовка
            Return StringRegExp($sTxt, '(?mi)^\Q[' & $sSect & ']\E[\r\n]+((?:[^[\r\n].*(?:[\r\n]+|$))*)', 1, 0)[0]
        Case 4 ; получение массива всех секций
            Return StringRegExp($sTxt, '(?m)^\[[^]\r\n]+\].*(?:[\r\n]+[^[\r\n][^\r\n]+)*', 3)
    EndSwitch
EndFunc

 ; not working
Func _test()
    $test3 ='dsfsdf'
    $test4 = $test3&$test2
EndFunc


Файл команд (лежит в папке со скриптом) и называется test.abc:
Код:
[test]
_test()
MsgBox (0,'gfg', $test3)
MsgBox (0,'fgfgf', $test4)

Вот именно функция _test() и не выполняется, а с ней и остальные команды в секции
Вид нужен именно такой, прописать все в код невозможно
 
Последнее редактирование:

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Код:
Local $123 = 'функция', $456 = 'сообщение'
Local $aOF = IniReadSection(@ScriptDir & '\test.txt', 'test')

For $i = 1 To $aOF[0][0]
    Execute($aOF[$i][1])
Next

Func _test()
MsgBox(0, '', '1234567890')
EndFunc


содержание файла test.txt
Код:
[test]
0=MsgBox (0,'gfg', $123)
1=MsgBox (0,'fgfgf',$456)
2=_test()
 
Последнее редактирование:
Автор
E

eus_deus

Новичок
Сообщения
118
Репутация
0
joiner, что-то такое встречал, но не нравилась сама задумка нумерации строк. Хотя, если нет другой возможности, будем использовать так
 

joiner

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

eus_deus

Новичок
Сообщения
118
Репутация
0
Так оно вроде так и записано:
Код:
Func _shell($sSect)
   Local  $sSF, $aOF,$sOF
    $sOF = FileRead($sF)
    $sSF = _SectionText($sOF, $sSect, 3)
    $aOF = StringSplit($sSF, @CR)
    For $i=1  To $aOF[0]
       If $aOF[$i] =''  Then ContinueLoop
        Execute(StringStripWS($aOF[$i], 3))
    Next
EndFunc

И в исходном коде работает. Вопрос в неработоспособности в скомпилированном виде
 
Последнее редактирование модератором:

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
Ваш пример работает корректно в скомпилированном виде (AutoIt v3.3.14.5). Возможно вы используете Au3Stripper?
 
Автор
E

eus_deus

Новичок
Сообщения
118
Репутация
0
Возможно вы используете Au3Stripper?
Obfuscator ---->Wrapper ---> PECompact
И да, после проверки выяснил, что выложенный пример работает. Что же, надо искать доступ к оригиналу и смотреть, как его упростить для выкладки на суд
Тему пока не закрываю
 
Последнее редактирование:

joiner

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

eus_deus

Новичок
Сообщения
118
Репутация
0
Дело не в секретке, а просто хотя бы в размере
 

joiner

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

eus_deus

Новичок
Сообщения
118
Репутация
0
Да, блин, без обфускации работает как и надо. Тему закрываем, всем спасибо
Вот только как??? Раньше было проще. Где кнопка "Тема решена"?
 
Верх