Что нового

Попытка сделать самораспаковывающуюся программу.

  • Автор темы VitAl2013
  • Дата начала
V

VitAl2013

Гость
Делаю так:
Код:
if $CmdLine[1] = "/source" Then
	FileInstall ("[полный путь для скрипта]\[имя скрипта].au3", @ScriptDir & "\[имя скрипта].au3")
	Exit
EndIf
И у меня сразу 2 проблемы:
1) Программа выстраивается и работает, но только с этим параметром иначе отправлят меня на какуюто заоблачную строчку в коде с криком Error! Соотвтвенно рушиться совсем, даже не высветив что там в той строке написано. (Это ещё и в дополнении к вопросу зачем нужна "хорошая" декомпиляция - ссылку на ветку позже добавлю)
2) Скрипт при таком раскладе не запускается.

Как это всё побороть?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
VitAl2013
А если так попробовать:
Код:
FileInstall("[полный путь для скрипта]\[имя скрипта].au3", @ScriptDir & "\[имя скрипта].au3")
If $CmdLine[1] <> "/source" Then ;или любое другое условие
	FileDelete(@ScriptDir & "\[имя скрипта].au3")
	Exit
EndIf
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 473
Репутация
2 403
Ну начну с того, что скрипт в приведённом виде не вызывает никаких ошибок (если конечно он запускается как минимум с одним параметром, я полагаю в начале скрипта есть проверка на число вызываемой ком. строки), и подобное использование довольно легитимно, я частно практикую распаковку файлов по условию. Вопрос тут в другом, обусловливается ли выполнение дальнейшего кода присутствием распаковываемого файла, т.е если есть обращение к этому файлу, а его нет, то программа не учитывая этого вываливается с ошибкой. Решение тут одно - правильно писать код :smile:. Нужно делать проверку, а не полагаться на условные ситуаций.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 473
Репутация
2 403
madmasles [?]
можно Вас попросить привести пример
Пример? он в первом сообщений. Простое условие, если оно выполнимо, то файл устанавливается (он как бы на этапе компиляций по любому в скрипт вшивается, но распаковывается в папку назначения только при указанном условий).
 
Автор
V

VitAl2013

Гость
Да, но у меня если я не пишу этот "/sourse", то программа падает. Что не правильно я написал или что я не дописал?

Заработало вот так:
Код:
if Ubound($CmdLine)>1 and $CmdLine[1] = "/source" Then
    FileInstall ("[полный путь для скрипта]\[имя скрипта].au3", @ScriptDir & "\[имя скрипта].au3")
    Exit
EndIf

Но в скрипте всё равно приходится комментировать строки. Есть ли способ проверки из какого положения (скрипт или программа) запущен процесс?

Всё, нарыл. В итоге получил:
Код:
if @compiled = 1 and Ubound($CmdLine)>1 and $CmdLine[1] = "/source" Then
    FileInstall ("[полный путь для скрипта]\[имя скрипта].au3", @ScriptDir & "\[имя скрипта].au3")
    Exit
EndIf
который меня устраивает.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 473
Репутация
2 403
VitAl2013 [?]
Заработало вот так
Можно и так:
Код:
If $CmdLine[0] > 1 And $CmdLine[1] = "/source" Then
    FileInstall("[полный путь для скрипта]\[имя скрипта].au3", @ScriptDir & "\[имя скрипта].au3")
    Exit
EndIf

А ещё есть $CmdLineRaw, там вообще не нужна проверка, но нужно извлекать параметры. Подробнее.

в скрипте всё равно приходится комментировать строки
Какие, и главное - зачем?

Есть ли способ проверки из какого положения (скрипт или программа) запущен процесс?
@Compiled?
 
Верх