PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Как создать программу-инсталятор?


Как создать программу-инсталятор?

Сообщений 1 страница 18 из 18

1

Хочу создать что-то типа программы-инсталятора.

Недавно познакомился с функцией

Код:
If CreateFile()
EndIf

Так вот например я напишу ехешник следующего содержания:

Код:
Enumeration
  #create_1
  #create_2
EndEnumeration

If OpenConsole()
  aaa
  PrintN("Press 1 to install file text.txt")
  PrintN("Press 2 to install file text2.txt")
  string$=Input()
  If string$="1"
    If CreateFile(#create_1, "C:\Program Files\Proga\text.txt")
      WriteString(#create_1, "This is a file C:\Program Files\Proga\text.txt")
      CloseFile(#create_1)
    EndIf
  Goto aaa
  ElseIf string$="2"
    If CreateFile(#create_2, "C:\Program Files\Proga\text2.txt")
      WriteString(#create_2, "This is a file C:\Program Files\Proga\text2.txt")
      CloseFile(#create_2)
    EndIf
  Goto aaa
  EndIf
EndIf

Кеночено, создадутся файлы text.txt и text2.txt с соответствующим текстом о их месторасположении. Но это подходит только для файлов с определенным текстовым содержимым. А как же изображения? Нельзя ли, чтобы как-то изображения и иные файлы подгружались из определенного места в интернете или из определенного архива.

Отредактировано Сергей (01.11.2010 20:07:19)

0

2

Для хранения изображений используй CreatePack(). Доставать из пака можно так:

Код:
  ; Loading the packed files back to memory...
  OpenPack("mycompressedfiles.pak") 
    CatchSprite(0,NextPackFile())   ; InitSprite must be called before in your program...
    CatchSprite(1,NextPackFile())   ; ...first file will be loaded as Sprite 0, second as Sprite 1
    CatchSound(0,NextPackFile())    ; InitSound must be called before in your program...
    CatchSound(1,NextPackFile())    ; ...first file will be loaded as Sound 0, second as Sound 1
  ClosePack()

тут пример с изображениями и музыкой. Вообще пример инсталлятора есть в кодархиве. Посмотри.

0

3

BaCo написал(а):

Для хранения изображений используй CreatePack().

Теперь пожалуйста поподробнее

Отредактировано Сергей (01.11.2010 20:46:31)

0

4

Сергей написал(а):

Хочу создать что-то типа программы-инсталятора.

Делал что-то похожее на программу-инсталлятор http://pure-basic.narod.ru/project/PicAsmEditor.html

Все файлы добавлялись внутрь исполняемого файла с помощью оператора IncludeBinary

0

5

Пётр написал(а):

Все файлы добавлялись внутрь исполняемого файла с помощью оператора IncludeBinary

BaCo написал(а):

Для хранения изображений используй CreatePack()

Что один, что другой. Я прошу обьяснить, а мне дают новые варианты. обьясните принцип работы IncludeBinary и CreatePack().

0

6

Открываешь редактор кода PureBasic.
Копируешь в него строку IncludeBinary и CreatePack().
Ставишь текстовый курсор сначала на IncludeBinary и нажимаешь на F1 на клавиатуре и читаешь...
Тоже самое проделываешь с CreatePack().
Вот русская справка если что http://pure-basic.narod.ru/PureBasic.chm
А здесь в конце, есть пример использования IncludeBinary http://pure-basic.narod.ru/docs/point.html

0

7

спасибо

0

8

Код:
  OpenPack("myfiles.pak") 
    CatchSprite(0,NextPackFile())   ; InitSprite must be called before in your program...
    CatchSprite(1,NextPackFile())   ; ...first file will be loaded as Sprite 0, second as Sprite 1
    CatchSound(0,NextPackFile())    ; InitSound must be called before in your program...
    CatchSound(1,NextPackFile())    ; ...first file will be loaded as Sound 0, second as Sound 1
  ClosePack()

А можно как-то указать здесь, куда распаковывать файлы?

0

9

Функция NextPackFile() всего лишь возвращает указатель на первый байт в памяти разжатой информации.
Размер области памяти можно узнать с помощью функции PackFileSize()

Зная размер и адрес, можно создать файлы.

Код:
Procedure Create_File(FileName.s, *Point, Size)
  If FileName<>"" And *Point And Size>0
    If CreateFile(0, FileName)
      WriteData(0,*Point, Size)
      CloseFile(0)
    EndIf
  EndIf
EndProcedure


If OpenPack("mycompressedfiles.pak") 
    Create_File("C:\1.txt", NextPackFile(), PackFileSize())
    Create_File("C:\2.txt", NextPackFile(), PackFileSize())
    ClosePack()
EndIf

Посмотри на этот пример http://pure-basic.narod.ru/miscfiles/PureSFX.rar
Он показывает как можно создавать самораспаковывающиеся ZIP архивы.
После небольшой модификации, его можно превратить в инсталлятор.

0

10

Нет, такой вариант кода не воспринимается. необходимо писать не CreateFile, а CatchSound или CatchSprite

0

11

Сергей написал(а):

Нет, такой вариант кода не воспринимается

Не воспринимается кем или чем?

Сергей написал(а):

необходимо писать не CreateFile, а CatchSound или CatchSprite

Ты хочешь извлекать содерживое на диск или просто загружать музыку или спрайт?
Ведь в начале темы писал про создание инсталлятора....

0

12

Загружать. Не воспринимается PB 4.50

0

13

И что пишет?
Какие сообщения об ошибках?

0

14

с текстовым и работает, но с РВ и с имаджами не работает.

0

15

Сергей написал(а):

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

Выложи все файлы, а то так ничего не понятно.

0

16

Категорически не хочет народ пользоваться поиском (это к теме Инсталятор на purebasic...)
Для компиляции верхнего кода нужна  библиотека PureZIP.zip  на сайте предоставлено для разных версий PB.
Пробовал для  PB4.41,  нужно не много подкорректировать код: добавить  дополнительный параметр в процедуре PureSFXMakeEXE(*x) и PureSFXCallback(File.s, PerCent.f, UserParam.l)
Всё работает.

0

17

Пример простого инсталятора
InstalMaker

0

18

akim написал(а):

Пример простого инсталятора

Работает отлично, особенно полный вариант!

С одной стороны такие примеры нужны для общего развития! А с другой, за них готовы платить деньги.
Может на всякий случай - уничтожить все исходники программ на PB, выложенные на сайтах ... :mybb:

0


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Как создать программу-инсталятор?