Автор Тема: Попытка сделать самораспаковывающуюся программу.  (Прочитано 4337 раз)

0 Пользователей и 1 Гость просматривают эту тему.

VitAl2013

  • Гость
Делаю так:
Код: AutoIt [Выделить]
if $CmdLine[1] = "/source" Then
    FileInstall ("[полный путь для скрипта]\[имя скрипта].au3", @ScriptDir & "\[имя скрипта].au3")
    Exit
EndIf

И у меня сразу 2 проблемы:
1) Программа выстраивается и работает, но только с этим параметром иначе отправлят меня на какуюто заоблачную строчку в коде с криком Error! Соотвтвенно рушиться совсем, даже не высветив что там в той строке написано. (Это ещё и в дополнении к вопросу зачем нужна "хорошая" декомпиляция - ссылку на ветку позже добавлю)
2) Скрипт при таком раскладе не запускается.

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

Русское сообщество AutoIt


Оффлайн madmasles [?]

  • Глобальный модератор
  • *
  • Сообщений: 7790
  • Репутация: 2317
  • Пол: Мужской
  • Награды За модерирование форума
    • Награды
  • Версия AutoIt: 3.3.x.x
VitAl2013
А если так попробовать:
Код: AutoIt [Выделить]
FileInstall("[полный путь для скрипта]\[имя скрипта].au3", @ScriptDir & "\[имя скрипта].au3")
If $CmdLine[1] <> "/source" Then ;или любое другое условие
    FileDelete(@ScriptDir & "\[имя скрипта].au3")
    Exit
EndIf


Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7827
  • Репутация: 2288
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
Ну начну с того, что скрипт в приведённом виде не вызывает никаких ошибок (если конечно он запускается как минимум с одним параметром, я полагаю в начале скрипта есть проверка на число вызываемой ком. строки), и подобное использование довольно легитимно, я частно практикую распаковку файлов по условию. Вопрос тут в другом, обусловливается ли выполнение дальнейшего кода присутствием распаковываемого файла, т.е если есть обращение к этому файлу, а его нет, то программа не учитывая этого вываливается с ошибкой. Решение тут одно - правильно писать код :). Нужно делать проверку, а не полагаться на условные ситуаций.


Правила, Поиск, Супер тема


AutoIt is simple, subtle, elegant.


«Не оказываю тех. поддержку через ПМ/ICQ, и по электронной почте - для этого есть форум. (C)»
«Законы Мэрфи неоспоримы!»


Мои работы

Оффлайн madmasles [?]

  • Глобальный модератор
  • *
  • Сообщений: 7790
  • Репутация: 2317
  • Пол: Мужской
  • Награды За модерирование форума
    • Награды
  • Версия AutoIt: 3.3.x.x
CreatoR  [?]
Цитировать
я частно практикую распаковку файлов по условию.
А можно Вас попросить привести пример.

Русское сообщество AutoIt

Re: Попытка сделать самораспаковывающуюся программу.
« Ответ #3 Отправлен: Апрель 12, 2010, 23:39:16 »

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7827
  • Репутация: 2288
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
madmasles  [?]
Цитировать
можно Вас попросить привести пример
Пример? он в первом сообщений. Простое условие, если оно выполнимо, то файл устанавливается (он как бы на этапе компиляций по любому в скрипт вшивается, но распаковывается в папку назначения только при указанном условий).

VitAl2013

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

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

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

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

который меня устраивает.
« Последнее редактирование: Апрель 13, 2010, 07:56:04 от VitAl2013 »

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7827
  • Репутация: 2288
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
VitAl2013  [?]
Цитировать
Заработало вот так
Можно и так:
Код: AutoIt [Выделить]
If $CmdLine[0] > 1 And $CmdLine[1] = "/source" Then
    FileInstall("[полный путь для скрипта]\[имя скрипта].au3", @ScriptDir & "\[имя скрипта].au3")
    Exit
EndIf

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

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

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

Русское сообщество AutoIt

Re: Попытка сделать самораспаковывающуюся программу.
« Ответ #6 Отправлен: Апрель 13, 2010, 07:58:10 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
16 Ответов
6523 Просмотров
Последний ответ Июль 31, 2011, 21:55:04
от valdur2000
4 Ответов
4222 Просмотров
Последний ответ Ноябрь 25, 2011, 02:58:02
от focus
10 Ответов
3754 Просмотров
Последний ответ Октябрь 09, 2011, 15:29:48
от AMBULATUR
12 Ответов
5476 Просмотров
Последний ответ Апрель 15, 2012, 11:37:00
от MyBB
6 Ответов
2501 Просмотров
Последний ответ Октябрь 02, 2014, 20:19:45
от DarWiM
0 Ответов
993 Просмотров
Последний ответ Октябрь 02, 2014, 16:36:25
от madmasles
1 Ответов
820 Просмотров
Последний ответ Январь 25, 2015, 00:34:32
от Garrett
8 Ответов
1828 Просмотров
Последний ответ Ноябрь 04, 2016, 14:58:07
от GameFP
1 Ответов
880 Просмотров
Последний ответ Декабрь 31, 2017, 18:13:03
от betauto
2 Ответов
312 Просмотров
Последний ответ Июнь 15, 2018, 13:53:09
от Khaibit