Базы данныхИнтернетКомпьютерыОперационные системыПрограммированиеСетиСвязьРазное
Поиск по сайту:
Подпишись на рассылку:

Назад в раздел

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

div.main {margin-left: 20pt; margin-right: 20pt}

Гайдар Магдануров

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

Наиболее частый вопрос, который мне задают - как сделать свою программу инсталляции? А когда я расспрашиваю подробнее мне объясняют, что нужна просто красивая программка, которая скопирует файлы из одного места в другое. Поэтому я решил написать статью, где соберу многое из того, что писал ранее (и это есть на VBStreets). мы напишем программу, которая будет устанавливать файлы.

Сразу извиняюсь за некоторую сумбурность и непоследовательность повествования, просто у меня сейчас ОЧЕНЬ мало времени. поэтому здесь лежит пример.

Чем мне нравится идея написания собственного инсталлятора, так это тем. что вы не ограничены и можете засунуть сюда множество своих функций, и пишется инсталлятор как обычная программа.

Теперь объясняю идею - надо написать программу, которая может извлекать, копировать (добавлять запись в system.ini и в реестр и т.д.). Но все это мелочи ... Основная идея - все файлы держать в ресурсах как бинарные, а потом извлекать их куда надо.

Количество форм программы может быть любым, но я не рекомендую делать их слишком много, чтобы не злить и без того злого юзверя. Для того, чтобы формы появлялись там, где надо, мы будем их настраивать так:

При нажатии кнопки Далее>> (или Next>>), можете назвать так, как хотите.

frmNext.Show
frmNext.Height = Me.Height
frmNext.Width = Me.Width
frmNext.Move Me.Left, Me.Top
Unload Me

Юзер может подвинуть форму, поэтому другую нужно отображать там же, где была предыдущая, т.к. это будет очень эффектно, как будто это одна форма :-).

В код первой формы мы вставим такую штуку (Form_Load):

If App.PrevInstance Then
End
MsgBox "Уже запущена одна версия программы установки!", 16, "Setup"
End If

Это для того, что бы шибко умный пользователь не запустил два приложения одновременно.

Далее вы можете насовать сколь угодно много форм, но желательно сделать диалог выбора папки для установки. Тут пригодятся следующие вещи: размещаем Dir1, List1, Label1, Label2,Command1. Пишем код.

Private Declare Function GetDiskFreeSpace Lib "kernel32" Alias "GetDiskFreeSpaceA" (ByVal lpRootPathName As String, lpSectorsPerCluster As Long, lpBytesPerSector As Long, lpNumberOfFreeClusters As Long, lpTtoalNumberOfClusters As Long) As Long

События:

Private Sub Drive1_Change()
Spaces = GetDiskFreeSpace(Mid$(Drive1.Drive, 1, 2), secpercl, bytespersec, numoffreecl, AllCl)
Dim l As Long
l = 1024 ^ 2
ss = bytespersec / l
fs = secpercl * ss * numoffreecl
fs = Format(fs, "0")
label2.Caption = "Свободно на диске: " & fs & " MB"
Dir1.Path = Drive1.Drive
End Sub

Private Sub Dir1_Change()
mDir = Dir1.Path
Label1.Caption = mDir ' Эту переменную загоняем в модуль как Public InsDir as String, она нам еще пригодится.
End Sub

Private Sub Command1_Click()
On Error GoTo ree_
nd = InputBox("Введите имя директории", "Новая папка...")
If nd = "" Then Exit Sub
MkDir Dir1.Path & "" & nd
Dir1.Refresh
Exit Sub
ree_:
MsgBox "Ошибка, однако.", 16, "Setup"
End Sub

Можете добавлять еще что-нибудь. Это же я так для примера.

Потом идет диалог, установка. Там делаем такую вещь:

Private Sub Form_Load() 'Извлекаем из ресурсов файл, и создаем ярлык.
ProgressBar1.Value = 20
Dim BinaryData() As Byte
BinaryData = LoadResData(101, "Files")
ProgressBar1.Value = 80
Open mDir & "wininfo.exe" For Binary Access Write As #1
Put #1, 1, BinaryData
Close #1
ProgressBar1.Value = 98
lngresult = fCreateShellLink("....Desktop", "WinInfo", mDir & "wininfo.exe", "") 'В английских форточках работает.
ProgressBar1.Value = 100
Unload Me
frmFinish.Show
End Sub

Все, после этого выводим последний диалог с поздравлениями.

Примечания:

Возникает проблема - самому инсталлятору нужны посторонние файлы, вроде msvbvm60.dll и ocx, которые вы использовали. Это решается так - эти файлы тащите вместе и инсталлятором в sfx архиве. При распаковке которого запускается ваш setup. что не раздражает пользователя. (Это вы увидите в примере). А в инсталляторе добавляете команды типа FileCopy - переносите файлы туда, куда надо.



  • Главная
  • Новости
  • Новинки
  • Скрипты
  • Форум
  • Ссылки
  • О сайте




  • Emanual.ru – это сайт, посвящённый всем значимым событиям в IT-индустрии: новейшие разработки, уникальные методы и горячие новости! Тонны информации, полезной как для обычных пользователей, так и для самых продвинутых программистов! Интересные обсуждения на актуальные темы и огромная аудитория, которая может быть интересна широкому кругу рекламодателей. У нас вы узнаете всё о компьютерах, базах данных, операционных системах, сетях, инфраструктурах, связях и программированию на популярных языках!
     Copyright © 2001-2024
    Реклама на сайте