Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 11656
Последний выпуск: 19.06.2015

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

Гайдар Магдануров
www.vbstreets.ru

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

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог